Macro para Transponer datos horizontales a Verticales

Quisiera conocer el código en una macro en VBA para transponer una base de datos de filas a columnas

La base se encuentra así:

Ruben     |1   |2  | 3

Guevara|4   |5  |6  |7

Y debe quedar as:

Ruben     | 1

Ruben     | 2

Ruben     | 3

Guevara | 4

Guevara | 5

Guevara | 6

Guevara | 7

Es importante anotar que la fila de "Guevara" es mas larga que la Fila de "Ruben", ya que no todas las filas tienen la misma cantidad de datos.

Si alguien es tan amable de ayudarme con mi necesidad.

3 Respuestas

Respuesta
1

Te paso una idea... ubícate sobre alguna celda de la base de datos y ejecuta esta macro

Sub transpone()
Dim a As Variant
Selection.CurrentRegion.Select
a = Application.Transpose(Selection.Value)
Selection.ClearContents
ActiveCell.Resize(UBound(a, 1), UBound(a, 2)).Value = a
ActiveCell.Select
End Sub

Respuesta
2

Suponiendo que tu información está así, empezando en la celda A2:

El resultado quedará en otra hoja, de esta forma:

Utiliza la siguiente macro, cambia "Hoja5" y "Hoja6" por los nombres de tus hojas

Sub Horizontales()
'
' Por.Dante Amor
'
    Set h1 = Sheets("Hoja5")    'hoja con datos
    Set h2 = Sheets("Hoja6")    'hoja con resultados
    h2.Cells.ClearContents
    k = 2
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        For j = 2 To h1.Cells(i, Columns.Count).End(xlToLeft).Column
            h2.Cells(k, "A") = h1.Cells(i, "A")
            h2.Cells(k, "B") = h1.Cells(i, j)
            k = k + 1
        Next
    Next
    MsgBox "Fin"
End Sub


.

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

.

Avísame cualquier duda

.

Respuesta
1

Esta macro te coloca la lista en la misma hoja, justo abajo de tu lista original

Sub transponer()
Set datos = Range("b2").CurrentRegion
With datos
    Set destino = .Rows(.Rows.Count + 3).Resize(.Rows.Count * .Columns.Count, 2)
    matriz = destino:    x = 1
    For i = 1 To .Rows.Count
            For j = 2 To .Columns.Count
                nombre = .Cells(i, 1): valor = .Cells(i, j)
                If valor <> Empty Then
                matriz(x, 1) = nombre:  matriz(x, 2) = valor:  x = x + 1
                End If
            Next j
    Next i
End With
Range(destino.Address) = matriz
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas