Excel: valores separados por comas dentro de una celda: explotar en más filas creadas con cada combinación

Excel: valores separados por comas dentro de una celda: explotar en más filas creadas con cada combinación

Quiero pasar de algo así como la primera tabla a la segunda tabla:

ingrese la descripción de la imagen aquí

...Por el simple hecho de usarlo en una tabla dinámica. Me gustaría que la primera tabla estuviera en una hoja y que la segunda tabla fuera otra hoja, actualizando en vivo esta segunda tabla "explosionada". Lo he estado intentando durante un tiempo y no puedo hacer que esto funcione. ¿Alguna sugerencia? El formulario que estoy usando genera este tipo de lista de valores separados por comas en celdas individuales y, en este caso, no es práctico hacerlo manualmente, ya que habría miles de filas.

Respuesta1

Modifiqué el guióndesde el enlace proporcionado por gtwebb. Aquí está el guión:

Option Explicit

Sub Main()

Columns("B:B").NumberFormat = "@"
Dim i As Long, c As Long, r As Range, v As Variant

For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
    v = Split(Range("B" & i), ", ")
    c = c + UBound(v) + 1
Next i

For i = 2 To c
    Set r = Range("B" & i)
    Dim arr As Variant
    arr = Split(r, ", ")
    Dim j As Long
    r = arr(0)
    For j = 1 To UBound(arr)
        Rows(r.Row + j & ":" & r.Row + j).Insert Shift:=xlDown
        r.Offset(j, 0) = arr(j)
        r.Offset(j, -1) = r.Offset(0, -1)
        r.Offset(j, 1) = r.Offset(0, 1)
    Next j
Next i

Columns("C:C").NumberFormat = "@"
Dim k As Long, d As Long, s As Range, w As Variant

For k = 1 To Range("C" & Rows.Count).End(xlUp).Row
    w = Split(Range("C" & k), ", ")
    d = d + UBound(w) + 1
Next k

For k = 2 To d
    Set s = Range("C" & k)
    Dim arrb As Variant
    arrb = Split(s, ", ")
    Dim m As Long
    s = arrb(0)
    For m = 1 To UBound(arrb)
        Rows(s.Row + m & ":" & s.Row + m).Insert Shift:=xlDown
        s.Offset(m, 0) = arrb(m)
        s.Offset(m, -1) = s.Offset(0, -1)
        s.Offset(m, -2) = s.Offset(0, -2)
    Next m
Next k
End Sub

Como solo necesitaba esto para dos columnas, no me molesté en realizar bucles. Lo único que se modifica es que el script se repite una segunda vez, se cambian las variables y Offsetse cambia el parámetro.

información relacionada