
Ich möchte etwa von der ersten Tabelle zur zweiten Tabelle gelangen:
...Für die Verwendung in einer Pivot-Tabelle. Ich möchte, dass die erste Tabelle auf einem Blatt und die zweite Tabelle auf einem anderen Blatt ist, sodass diese „explodierte“ zweite Tabelle live aktualisiert wird. Ich habe es eine Weile versucht und bekomme es nicht zum Laufen. Irgendwelche Vorschläge? Das von mir verwendete Formular gibt diese Art von Liste mit durch Kommas getrennten Werten in einzelnen Zellen aus, und in diesem Fall ist es nicht praktikabel, dies manuell zu tun, da es Tausende von Zeilen geben würde.
Antwort1
Ich habe das Skript geändertüber den von gtwebb bereitgestellten Link. Hier ist das Skript:
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
Da ich dies nur für zwei Spalten benötigte, habe ich auf die Schleife verzichtet. Die einzigen Änderungen sind, dass das Skript ein zweites Mal wiederholt wird, Variablen geändert werden und der Offset
Parameter geändert wird.