Macro transponer datos y generar ciclo

Solicito de su valiosa ayuda. Tengo una planilla (Hoja1) donde tengo valores desde A6 hasta F6 y en la columna A6 hacia abajo tengo el nombre de cada vendedor. Desde la columna G5 hasta Q5 tengo fechas, y abajo de estas fechas tengos ciertos valores. Desde R6 hasta Z6 tengo valores asociados a los datos obtenidos de G5:Q5.

Lo que necesito es que en otra hoja (Hoja2) tome los valores de A6:F6 y realice el ciclo según la columna A y que además transponer los datos G5:Q5 en la nueva hoja asociando los datos. No se si es clara mi consulta, pero finalmente en una nueva hoja (Hoja2) necesito que se encuentre el ciclo para A6:F6 y que seguidamente pegue hacia abajo cada valores de G5:Q5, en otra columna desde G6:Q6, y en otra desde R6:Z6.

Agrego fotos de Hoja 1 (formato inicial) y Hoja2 (como lo necesito)

Muchas gracias por su ayuda!

Hoja1

Hoja2

Respuesta
1

Solo una consulta antes de desarrollarte la macro: ¿La hoja2 está vacía o se debe volcar la información a continuación de las filas que ya tenga ocupadas?

PD) No valores aún la respuesta.

Hola Elsa, la Hoja2 está vacía. La idea es que se genere el ciclo de acuerdo a la columna A y que se transpongan los datos de G5:Q5 y G6:Q6 pegados en cada columna contínua.

Por favor cualquier consulta no dudes en preguntar.

Muchas gracias!!

Entra al Editor de macros (con teclas ALT + F11)

Inserta un módulo y allí copia el siguiente código:

Sub transponeEspecial()
'x Elsamatilde
'hoja destino
Set ho2 = Sheets("Hoja2")
'fin del rango de datos
x = Range("A" & Rows.Count).End(xlUp).Row
'se inicia el ciclo en fila 6 y el destino es fila 4
'los inicios de col son: 7 (G) y 19(S)
[A6].Select
While ActiveCell.Row <= x
    dato = ActiveCell.Value
    ori = ActiveCell.Row: des = ho2.Range("A" & Rows.Count).End(xlUp).Row + 1
    c1 = 7: c2 = 19
    'se busca el fin de rango para ese vendedor
    While ActiveCell = dato And ActiveCell.Row <= x
        ActiveCell.Offset(1, 0).Select
    Wend
    'rango a copiar
    ini = ori: fini = ActiveCell.Row - 1
    For i = 1 To 12
        dif = fini - ini + des
        Range("A" & ini).Copy Destination:=ho2.Range("A" & des & ":A" & dif)
        Range("B" & ini & ":F" & fini).Copy Destination:=ho2.Range("B" & des)
        ho2.Range("G" & des & ":G" & dif) = Cells(5, c1)
        Range(Cells(ini, c1), Cells(fini, c1)).Copy Destination:=ho2.Range("H" & des)
        Range(Cells(ini, c2), Cells(fini, c2)).Copy Destination:=ho2.Range("I" & des)
        'se incrementa la col
        c1 = c1 + 1: c2 = c2 + 1
        'se ajusta 1er fila destino
        des = dif + 1
    Next i
    'se pasa al sgte Vendedor
    Range("A" & fini + 1).Select
Wend
MsgBox "Fin del proceso."
End Sub

Podrás ejecutarlo desde el mismo Editor o desde menú Desarrollador (Macros). Otros modos de ejecutar un código lo tengo explicado en la sección Macros de mi sitio.

Elsa funciona perfecto, realmente muy bien!!!

Perdona el exceso de confianza, pero como puedo hacer para que los datos que van a la Hoja2 se peguen como valores?

Agradezco mucho tu ayuda!!!

No me indicas si todas las col tiene fórmulas.

Por ejemplo para los 2 últimos pases sería:

Range(Cells(ini, c1), Cells(fini, c1)). Copy
Ho2.Range("H" & des). PasteSpecial (xlValues)
Range(Cells(ini, c2), Cells(fini, c2)). Copy
Ho2.Range("I" & des). PasteSpecial (xlValues)
        

Sdos y no olvides valorar la respuesta.

Elsa

Hola Elsa, efectivamente las fórmulas están en "H"; "I", pero lamentablemente la última rutina no me funciona, que puedo estar haciendo mal?

Muchas gracias!!!

Para saberlo tendría que ver cómo armaste la macro con este cambio ... Así debiera quedarte la parte del bucle FOR:

    For i = 1 To 12
        dif = fini - ini + des
        Range("A" & ini).Copy Destination:=ho2.Range("A" & des & ":A" & dif)
        Range("B" & ini & ":F" & fini).Copy Destination:=ho2.Range("B" & des)
        ho2.Range("G" & des & ":G" & dif) = Cells(5, c1)
        Range(Cells(ini, c1), Cells(fini, c1)). Copy
        Ho2.Range("H" & des). PasteSpecial (xlValues)
        Range(Cells(ini, c2), Cells(fini, c2)). Copy
        Ho2.Range("I" & des). PasteSpecial (xlValues)
        'se incrementa la col
        c1 = c1 + 1: c2 = c2 + 1
        'se ajusta 1er fila destino
        des = dif + 1
    Next i

Si te sigue dando algún error tendrás que pasarme tu libro para revisarlo. Toma algunos de mis correos que aparecen en la imagen.

Envie el archivo a los mails indicados.

Muchas gracias!

Y ya te lo devolví con el proceso ejecutado y sin problemas.

Quizás sea la versión Excel. Si se detiene presiona el botón Depurar y enviame imagen de la línea de amarillo.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas