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".
2.En el siguiente paso, elija "Crearé los campos de la página"; haga clic en Siguiente".
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".
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".
5. Obtendrás una tabla dinámica como esta. En el cuadro de diálogo, desmarque las casillas de verificación "Fila" y "Columna".
6.Eso te da una tabla dinámica de una celda.
7.Luego hará doble clic en una celda y, en una hoja nueva, obtendrá sus datos "no dinamizados" como una nueva tabla:
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.