/ / Excel-Makro zum Entstapeln von Daten - Excel, vba, excel-vba

Excel-Makro zum Entstapeln von Daten - Excel, VBA, Excel-VBA

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. Bildbeschreibung hier eingeben

Und meine Ausgabedaten sollten folgendermaßen aussehen:

Bildbeschreibung hier eingeben

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 № 1

Dies 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