Datenliste reorganisieren
16.09.2018 13:52:19
Jack
ich habe eine Datenliste in Baumstruktur wie folgt:
Level / Name
1 Main-Titel A
2 Sub-Titel AA
3 Sub-Sub-Titel AAA
4 Titel AAAA
4 Titel AAAB
4 Titel AAAC
2 Sub-Titel AB
4 Titel AB-A
4 Titel AB-B
4 Titel AB-C
1 Main-Titel B
4 Titel B--A
4 Titel B--B
4 Titel B--C
Ziel ist es eine Liste wie folgt daraus zu generieren, bei der die hierachische Form in eine Tabellenform überführt wird und die jeweiligen Titel vorne weg gestellt werden:
1 Main-Titel A 2 Sub-Titel AA 3 Sub-Sub-Titel AAA 4 Titel AAAA
1 Main-Titel A 2 Sub-Titel AA 3 Sub-Sub-Titel AAA 4 Titel AAAB
1 Main-Titel A 2 Sub-Titel AA 3 Sub-Sub-Titel AAA 4 Titel AAAC
1 Main-Titel A 2 Sub-Titel AB - 4 Titel AB-A
1 Main-Titel A 2 Sub-Titel AB - 4 Titel AB-B
1 Main-Titel A 2 Sub-Titel AB - 4 Titel AB-C
1 Main-Titel B - - 4 Titel B--A
1 Main-Titel B - - 4 Titel B--B
1 Main-Titel B - - 4 Titel B--C
Einträge auf dem Level 4 gibt es immer, aber es muss die Zwischen-Titel z.B. 2 oder 3 nicht notwendigerweise geben.
Aktuell verwende ich folgenden Code.
Option Explicit
Sub ReorgData()
Dim r As Long, lr As Long, nr As Long
Dim T1 As String, T2 As String, T3 As String, B1 As String, B2 As String, B3 As String
Application.ScreenUpdating = False
lr = Cells(Rows.Count, 2).End(xlUp).Row
Columns("v:as").Clear
nr = 0
For r = 1 To lr Step 1
If Cells(r, 2) = "1" Then
T1 = Cells(r, 3)
B1 = Cells(r, 7)
ElseIf Cells(r, 2) = "2" Then
T2 = Cells(r, 3)
B2 = Cells(r, 7)
ElseIf Cells(r, 2) = "3" Then
T3 = Cells(r, 3)
B3 = Cells(r, 7)
Else
nr = nr + 1
Cells(nr, 22) = T1
Cells(nr, 23) = B1
Cells(nr, 24) = T2
Cells(nr, 25) = B2
Cells(nr, 26) = T3
Cells(nr, 27) = B3
Cells(nr, 28).Resize(, 28).Value = Cells(r, 1).Resize(, 28).Value
End If
Next r
Application.ScreenUpdating = True
Sheets("tabelle5").Range("v1") = "Titel1"
Sheets("tabelle5").Range("w1") = "Titel1 Beschreibung"
Sheets("tabelle5").Range("x1") = "Titel2"
Sheets("tabelle5").Range("y1") = "Titel2 Beschreibung"
Sheets("tabelle5").Range("z1") = "Titel3"
Sheets("tabelle5").Range("aa1") = "Titel3 Beschreibung"
Sheets("tabelle5").Range("ab1") = "Status"
End Sub
Dieser funktioniert zwar gut, allerdings würde er mir statt o.g. Ziel-Tabelle folgendes Ergebnis anzeigen. Dabei werden die 2er oder 3er Titel wiederholt, obwohl es diese auf dem Level nicht mehr gibt.1 Main-Titel A 2 Sub-Titel AA 3 Sub-Sub-Titel AAA 4 Titel AAAA
1 Main-Titel A 2 Sub-Titel AA 3 Sub-Sub-Titel AAA 4 Titel AAAB
1 Main-Titel A 2 Sub-Titel AA 3 Sub-Sub-Titel AAA 4 Titel AAAC
1 Main-Titel A 2 Sub-Titel AB 3 Sub-Sub-Titel AAA 4 Titel AB-A
1 Main-Titel A 2 Sub-Titel AB 3 Sub-Sub-Titel AAA 4 Titel AB-B
1 Main-Titel A 2 Sub-Titel AB 3 Sub-Sub-Titel AAA 4 Titel AB-C
1 Main-Titel B 2 Sub-Titel AB 3 Sub-Sub-Titel AAA 4 Titel B--A
1 Main-Titel B 2 Sub-Titel AB 3 Sub-Sub-Titel AAA 4 Titel B--B
1 Main-Titel B 2 Sub-Titel AB 3 Sub-Sub-Titel AAA 4 Titel B--C
Fett markiert sind die nicht gewollten Einträge, die leer sein sollten.
Könnt ihr mir helfen, sodass die 2er und 3er Titel immer dort stoppen, wo z.B. ein neuer 1er oder 2er Titel beginnt, damit sich die Werte nicht endlos wiederholen?
Danke im voraus &
beste Grüße,
Jack