Transformar el diseño de la mesa horizontal en una mesa vertical

Transformar el diseño de la mesa horizontal en una mesa vertical

La siguiente hoja de Excel debe reorganizarse.

de

ID  Name1  Name2  Name3

1   Alf    Bert   Fritz

2   Curt

3   Otto   Mike

4   Sue    Zack 

a

ID  Name

1   Alf

1   Bert

1   Fritz

2   Curt

3   Otto

3   Mike

4   Sue

4   Zack

Me falta el término de búsqueda correcto, supongo que es bastante común, pero no puedo describirlo adecuadamente.

Respuesta1

Pruebe este código. Se explica por sí mismo al trabajar paso a paso. Sus datos de entrada comienzan en A1 y su salida comienza en A8. Esto se puede cambiar.

Por supuesto, es posible un código más corto y supongo que también se puede crear una fórmula matricial.

Sub single_col()
    Dim icell As Integer
    Dim irow As Integer, icol As Integer
    Dim nrows As Integer, ncols As Integer
    Dim rng_all As Range, rng_curr As Range, rng_trg As Range
    Set rng_all = Range("A2:D5")
    Set rng_trg = Range("A8")
    nrows = rng_all.Rows.Count
    icell = 0
    For irow = 1 To nrows
      Set rng_curr = rng_all.Rows(irow)
      ncols = WorksheetFunction.CountA(rng_curr)
      For icol = 2 To ncols
        icell = icell + 1
        Dim name As String
        name = rng_curr.Cells(1, icol).Text
        rng_trg.Value = rng_curr.Cells(1, 1).Text
        rng_trg.Offset(0, 1).Value = name
        Set rng_trg = rng_trg.Offset(1, 0)
      Next icol
    Next irow
End Sub

PD: el código anterior ya incluye la modificación sugerida en el comentario.

Respuesta2

Tiene un diseño de tabla dinámica que desea "despivotar". Esteartículode Jon Walkenbach muestra lo que se puede hacer con sólo unas pocas pulsaciones de teclas y no se necesita código VBA.

Para su situación específica, esto es lo que yo haría.

1.Abra el menú de la tabla dinámica "antiguo" usando Alt + D, P. Obtendrá un cuadro de diálogo como el que se muestra a continuación. Elija la opción "Múltiples rangos de consolidación" y haga clic en "Siguiente".

ingrese la descripción de la imagen aquí

2.En el siguiente paso, elija "Crearé los campos de la página"; haga clic en Siguiente".

ingrese la descripción de la imagen aquí

3. Resalte su rango de celdas para que quede definido en la parte superior del cuadro de diálogo, luego haga clic en el botón "Agregar" para copiar ese rango a la lista "Todos los rangos". Haga clic en Siguiente".

ingrese la descripción de la imagen aquí

4.Elige una celda alejada de tus datos. Aquí ves que elegí F3 en la misma hoja. (Puede elegir una hoja diferente si lo desea). Haga clic en "Finalizar".

ingrese la descripción de la imagen aquí

5. Obtendrás una tabla dinámica como esta. En el cuadro de diálogo, desmarque las casillas de verificación "Fila" y "Columna".

ingrese la descripción de la imagen aquí

6.Eso te da una tabla dinámica de una celda.

ingrese la descripción de la imagen aquí

7.Luego hará doble clic en una celda y, en una hoja nueva, obtendrá sus datos "no dinamizados" como una nueva tabla:

ingrese la descripción de la imagen aquí

Con los datos de esta tabla, ahora puede filtrar la columna C para mostrar los que no están en blanco, y puede eliminar la columna B y tendrá el diseño deseado.

información relacionada