Macro para generar automáticamente líneas concatenadas

No se si existe forma de hacer en excel o con macro lo que pido, os consulto a ver si sabéis darme una idea de cómo hacerlo porque estoy haciéndolo línea a línea y tardo la vida. Hago mis pinitos con macros muy sencillas, ya que aprendo en muchos casos a base de leer en foros como este, pero para esto no veo la forma. Os explico:

Tengo una excel, en la hoja con cuatro columnas que en base a un criterio necesito que en otra hoja 2, me genere tantas líneas como concatenaciones pueda hacer, en base a un criterio.

Me explico mejor con una imagen con un ejemplo de lo que tengo:

Lo que necesito es en la hoja 2, me genere tres columnas (A:CÓDIGO, B:NOMBRE y C: CÓDIGO DE MEJORA). En A:CÓDIGO cada fila sea una concatenación de cada valor de A con las posibles combinaciones de D. En B: NOMBRE y C: CÓDIGO MEJORA con que me deje lo que tiene actualmente para cada código a nivel inferior me valdría, si consigo una macro que me genere líneas en otra hoja, después intento adaptarla yo para lo que necesito con los nombres:

Los colores los pongo para que quede más claro que de una línea, tengo que generar tantas como canales de venta le asocie. Y dejar las columnas B y C iguales a la primera.

Muchísimas gracias por adelantado si me podéis dar una idea de por donde tirar...

1 respuesta

Respuesta
1

[Hola 

Te paso la macro 

Sub GENERAR()
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    '
    n = 1
    k = 2
    h2.Cells.ClearContents
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        cad = Split(h1.Cells(i, "D"), ",")
        For j = 1 To UBound(cad) + 1
            h2.Cells(k, "A") = h1.Cells(i, "A") & n
            h2.Cells(k, "B") = h1.Cells(i, "B")
            h2.Cells(k, "C") = h1.Cells(i, "C")
            '
            k = k + 1
            n = n + 1
        Next j
        n = 1
    Next i
End Sub

Hola, 

Muchas gracias por la rapidez!

No, no funciona, me genera líneas pero no respeta los códigos que le digo que tiene que concatenar en algunas líneas hace de más y en otras de menos. Por además, los ceros a la izquierda (en la excel original hay canales de venta"01", "02"..) los suprime. 

Tengo que mirar bien qué es lo que está haciendo exactamente... echo un vistazo y si veo algo más te digo..

Si no queda dudas, valorar la respuesta para finalizar


Te paso la macro

Sub GENERAR()
'Adriel Ortiz
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    '
    k = 2
    h1.Range("A1:C1").Copy
    h2.Range("A1").PasteSpecial Paste:=xlAll
    '
    h2.Range("A2:C" & Rows.Count).ClearContents
    '
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        cad = Split(h1.Cells(i, "D"), ",")
        '
            For p = LBound(cad) To UBound(cad)
                h2.Cells(k, "A") = h1.Cells(i, "A") & Trim(cad(p))
                h2.Cells(k, "B") = h1.Cells(i, "B")
                h2.Cells(k, "C") = h1.Cells(i, "C")
                k = k + 1
            Next p
    Next i
    '
    MsgBox "Proceso finalizado"
End Sub

Nono, no funciona bien, hace las concatenaciones de forma aleatoria. Muchas gracias por la aportación pero a ver si alguien que lo vea puede darle una vuelta más.. 

Quizá no estas siendo claro con el resultado que necesitas, aquí te paso la prueba de la macro y es similar a tu solicitud.

¡Gracias! 

Mis disculpas!! Acabo de ver que lo hice con la primera macro, no me dí cuenta que me habías puesto otra. con la segunda sale perfecto.

Está perfecto. Ahora con esta voy a trastear yo a ver si soy capaz de traerme los títulos correctos. 

Mil gracias!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas