Ich habe Daten, die vor meinem gestapelt wurdenes empfangen. Es gibt mehrere Wertzeilen für eine einzige vereinheitlichende ID. Ich möchte diese mehreren Zeilen in eine einzige Zeile konvertieren, indem ich Spalten hinzufüge und einen bestimmten Datenbereich einspreche.
Und meine Ausgabedaten sollten folgendermaßen aussehen:
Im Idealfall möchte ich das Makro auf zwei Arten sehenIn diesem Fall zieht es eine Reihe von Spalten zusammen (B: C). Ich würde es jedoch auch gerne sehen, wenn die benötigten Spalten nicht aufeinander folgen (B und E beispielsweise).
Danke für jede Hilfe, danke es !!
Antworten:
1 für die Antwort № 1Dies sollte das tun, was Sie möchten, indem Sie die Daten in Sheet2 entpacken, sodass Sheet1 nicht überschrieben wird. Dies ist im Grunde die sicherere Vorgehensweise. Es erstellt keine Tabelle in Sheet2, sondern schreibt nur die Daten.
Es besteht aus zwei inneren Schleifen: eine, die Zeilen mit identischen Codes durchläuft, und eine andere, die den Rest durchläuft. Sie müssen sicherstellen, dass der Header-Wert von Zelle B1 nicht dem ersten ID-Wert entspricht. Dies sollte kein Problem sein, da Ihre IDs Zahlen sind und B1 immer "ID" ist.
Sub UnstackData()
Dim wSht1 As Worksheet, wSht2 As Worksheet
Set wSht1 = Sheets("Sheet1")
Set wSht2 = Sheets("Sheet2")
Dim r As Integer: r = 2
Dim r2 As Integer: r2 = 1
Dim r1 As Integer, c2 As Integer
With wSht1
wSht2.Rows(1).Value = .Rows(1).Value
r1 = .Cells(.Rows.Count, "A").End(xlUp).Row
Do While r <= r1
c2 = 6
Do While .Cells(r, "A") = .Cells(r - 1, "A")
wSht2.Cells(r2, c2).Value = .Cells(r, "B").Value
wSht2.Cells(r2, c2 + 1).Value = .Cells(r, "C").Value
c2 = c2 + 2
r = r + 1
Loop
r2 = r2 + 1
Do While .Cells(r, "A") <> .Cells(r - 1, "A")
wSht2.Range("A" & r2 & ":E" & r2).Value = .Range("A" & r & ":E" & r).Value
r = r + 1
r2 = r2 + 1
Loop
r2 = r2 - 1
Loop
End With
End Sub