Transponer con datos por debajo

Quiero transponer ciertas celdas y pasarlas a filas nuevas, pero tengo el problema que debajo tengo mas datos insertados. Lo que quiero hacer es que al transponer, cree nuevas filas arrastrando la información que esta debajo.

Es para una base de datos, que serán unos 40k productos, que haciendo esto se multiplicará. Las columnas a transponer serán diferentes cantidades, una fila puede tener 3 compatibles y otras hasta 20. Pero si es verdad que todas empezarían en la columna "D" hacia la derecha.

Adjunto imágenes de lo que me refiero.

1º) Así es como vendría de origen, y quiero pasarlo a como esta en la imagen de abajo (todos los productos)

Me he hecho un poco de lió al explicarlo, si tenéis cualquier duda.

1 respuesta

Respuesta
1

H o l a: Te anexo una macro para poner la información como la necesitas pero en otra hoja.

Pon tu información en la "Hoja1"

Crea una hoja llamada "Hoja2"

Ejecuta la macro y tendrás en la "Hoja2" el resultado.

Sub Transponer()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    '
    u = h2.Range("A" & Rows.Count).End(xlUp).Row + 3
    h2.Range("A3:AZ" & u).Clear
    j = 3
    For i = 3 To h1.Range("A" & Rows.Count).End(xlUp).Row
        uc = h1.Cells(i, Columns.Count).End(xlToLeft).Column
        If uc > 3 Then
            coms = uc - 3 - 1
            h1.Range(h1.Cells(i, "A"), h1.Cells(i, "C")).Copy
            h2.Range(h2.Cells(j, "A"), h2.Cells(j + coms, "C")).PasteSpecial xlValues
            h1.Range(h1.Cells(i, "D"), h1.Cells(i, uc)).Copy
            h2.Range("D" & j).PasteSpecial xlValues, Transpose:=True
            j = j + coms + 1
        End If
    Next
    h2.Select
    [A1].Select
    Application.CutCopyMode = True
    Application.ScreenUpdating = True
    MsgBox "fin"
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Transponer
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Estimado Dante,

Muchas gracias por tu pronta respuesta, pero me ha surgido un problema, los productos que tienen una sola celda de "compatibilidades" al generar la macro me la repite 8 veces hacia abajo, no se si sabrá a que puede ser debido. Las que son mas de 8 las coloca cada una en su celda correctamente.

Muchas gracias!

Saludos!

Hice pruebas con una compatibilidad y sí funciona bien.

Revisa bien tus datos. Revisa que en esa fila no tengas espacios en las celdas de la derecha, tal vez tienes un espacio sobre esa fila en alguna columna de la derecha. Para estar más seguro, selecciona las celdas vacías de la derecha de esa fila y bórralas.

Prueba nuevamente y me comentas.

Si solucionaste el problema. R ecuerda valorar la respuesta. G racias

Si no encuentras el espacio, envíame tu archivo con el que estás probando y dime cuál registro es el que tiene problemas.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Ramon hb” y el título de esta pregunta.

Anexo la macro actualizada

Sub Transponer()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    co1 = h2.[A2]
    If co1 = "" Then
        MsgBox "Captura la letra de la columna del modelo en la celda A2"
        Exit Sub
    End If
    '
    co2 = Columns(co1).Column - 1
    u = h2.Range("A" & Rows.Count).End(xlUp).Row + 3
    h2.Range("A3:AZ" & u).Clear
    j = 3
    For i = 3 To h1.Range("A" & Rows.Count).End(xlUp).Row
        uc = h1.Cells(i, Columns.Count).End(xlToLeft).Column
        If uc > co2 Then
            coms = uc - co2 - 1
            h1.Range(h1.Cells(i, "A"), h1.Cells(i, co2)).Copy
            h2.Range(h2.Cells(j, "A"), h2.Cells(j + coms, co2)).PasteSpecial xlValues
            h1.Range(h1.Cells(i, co1), h1.Cells(i, uc)).Copy
            h2.Range(co1 & j).PasteSpecial xlValues, Transpose:=True
            j = j + coms + 1
        End If
    Next
    h2.Select
    [A1].Select
    Application.CutCopyMode = True
    Application.ScreenUpdating = True
    MsgBox "fin"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas