Crear una combinación de datos en excel

Tengo 3 hojas que tiene la siguiente información, en la primera tengo 5 áreas (A1, A2, A3, A4, A5) en la Hoja 2 tengo 6 tipos de documento (D1, D2, D3, D4, D5, D6), tengo 3 tipos de Motivos (M1, M2, M3), trato de obtener en una hoja 4 la siguiente información en la primera fila, que este A1 con D1 y M1, en la siguiente fila estará A1 con D1 y M2, en la siguiente fila estará A1 con D1 y M3, y así sucesivamente.

Respuesta

¿En un mismo libro y en varias hojas de calculo tienes esa información?

2 respuestas más de otros expertos

Respuesta
1

Parece que no hay expertos, en todoexpertos, alguien de buen corazón que quiera ayudar

Respuesta
1

Si hay lo que no hay es una explicación clara de lo que quieres, mínimo hubieras puesto una pantalla con la información que quieres combinar (puede ser ficticia).

Ves como es más fácil con un ejemplo y para la próxima no pongas tu archivo en servicios de nube que no te dejan descargar nada sin antes registrarte, eso dificulta que te ayuden, este es el resultado de la macro

y esta es la macro que hace las combinaciones

Sub generar_combinaciones()
Set h1 = Worksheets("hoja1")
Set h2 = Worksheets("hoja2")
Set h3 = Worksheets("hoja3")
Set h4 = Worksheets("hoja4")
matriz = Application.Transpose(h1.Range("a1").CurrentRegion)
matriz2 = Application.Transpose(h2.Range("d1").CurrentRegion)
matriz3 = Application.Transpose(h3.Range("m3").CurrentRegion)
cuenta = h1.Range("a1").CurrentRegion.Rows.Count
cuenta2 = h2.Range("d1").CurrentRegion.Rows.Count
cuenta3 = h3.Range("m1").CurrentRegion.Rows.Count
combinaciones = WorksheetFunction.Product(cuenta, cuenta2, cuenta3)
Set resultado = h4.Range("b2").Resize(combinaciones, 3)
matriz4 = resultado
x = 1
For i = 1 To cuenta
    For j = 1 To cuenta2
        For k = 1 To cuenta3
            area = matriz(i)
            documento = matriz2(j)
            motivo = matriz3(k)
            matriz4(x, 1) = area
            matriz4(x, 2) = documento
            matriz4(x, 3) = motivo
            x = x + 1
        Next k
    Next j
Next i
h4.Range(resultado.Address) = matriz4
resultado.EntireColumn.AutoFit
Erase matriz: Erase matriz2: Erase matriz3: Erase matriz4
Set h1 = Nothing: Set h2 = Nothing: Set h3 = Nothing: Set h4 = Nothing
End Sub

Hola Amigo, muchas gracias, por alguna razón me sale un error, si no fuera mucha molestia, podrías compartirme tu excel, estaría enormemente agradecido, mi correo es [email protected]

descargarlo de este enlace https://1drv.ms/x/s!Aqt18sdMf2xXiSgvMMjc9bnAFoiu 

Hola Amigo, he estado modificando al macro, para obtener el resultado, pero tengo un error 13, le he dado vuelta, pero no encuentro la razón, te copio el enlace

Saludos

https://usilpe-my.sharepoint.com/:x:/g/personal/david_lezcano_usil_pe/ERohSFhSX1ZPnayRfDCiqiIBs7_G2q_o7aId1BV1yYx3sg?e=dDvJzC 

El problema esta en que le pusiste encabezados sin hacer que la macro los ignorara, esta es una modificación de la macro para que no considere los encabezados, este es el resultado

y esta es la macro

Sub generar_combinaciones()
Set dependencia = Worksheets("dependencia").Range("a1").CurrentRegion
Set documentos = Worksheets("documento").Range("a1").CurrentRegion
With dependencia
    filas = .Rows.Count - 1: col = .Columns.Count
    Set dependencia = .Rows(2).Resize(filas)
End With
With documentos
    filas2 = .Rows.Count - 1: col2 = .Columns.Count
    Set documentos = .Rows(2).Resize(filas2)
End With
combinaciones = filas2 * filas
Set resultado = Worksheets("dependencia_documento").Range("b2").Resize(combinaciones, 2)
x = 1
With dependencia
    For i = 1 To filas
        For j = 1 To filas2
            resultado.Cells(x, 1) = dependencia.Cells(i)
            resultado.Cells(x, 2) = documentos.Cells(j)
            x = x + 1
        Next j
    Next i
End With
Set dependencia = Nothing: Set documentos = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas