Aufteilen einer Zeile mit mehreren Spalten in mehrere Zeilen

Aufteilen einer Zeile mit mehreren Spalten in mehrere Zeilen

Also habe ich diesen VBA-Code aufgegriffen ...

Sub NewLayout()
    For i = 2 To Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
        For j = 0 To 2
        If Cells(i, 3 + j) <> vbNullString Then
            intCount = intCount + 1
            Cells(i, 1).Copy Destination:=Cells(intCount, 10)
            Cells(i, 2).Copy Destination:=Cells(intCount, 11)
            Cells(i, 3 + j).Copy Destination:=Cells(intCount, 12)
            Cells(i, 6 + j).Copy Destination:=Cells(intCount, 13)
        End If
        Next j
    Next i
End Sub

Ich habe das folgende Szenario und bekomme das Makro nicht reibungslos zum Laufen (da ich nicht daran gewöhnt bin, irgendetwas zu programmieren). Ich habe versucht, den obigen Code zu verstehen, aber es ergibt einfach keinen Sinn, wie die Spalten in dieser Reihenfolge funktionieren. Kann mir bitte jemand helfen?

Ich habe diese Daten

Company  Code      Store1   Store Hours1    Store2   Store Hours2    Store3   Store Hours3
90       920016    BAY0     40              BCR0     35              BES0     20
90       920052    BAY0     40              BCR0     35              BES0     20
90       920054    BAY0     40              BCR0     35              BES0     20
90       920058    BAY0     40              BCR0     35              BES0     20

Ich muss die Spalten wie folgt in einer Zeile haben:

90       920016    BAY0    40
90       920016    BCR0    35
90       920016    BES0    20
90       920052    BAY0    40
90       920052    BCR0    35
90       920052    BES0    20
90       920054    BAY0    40
90       920054    BCR0    35
90       920054    BES0    20

Kann da vielleicht jemand weiterhelfen?

Antwort1

Anstatt also zu rechnen, können wir einfach alle 2 in die Spalten einsteigen, beginnend mit der dritten Spalte. Das macht die Mathematik ein wenig einfacher:

Sub NewLayout()
Dim ws As Worksheet
Dim i As Long, j As Long
Dim intCount As Long

For i = 2 To Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
    For j = 3 To 7 Step 2
        If Cells(i, j) <> vbNullString Then
            intCount = intCount + 1
            Cells(i, 1).Copy Destination:=Cells(intCount, 10)
            Cells(i, 2).Copy Destination:=Cells(intCount, 11)
            Cells(i, j).Copy Destination:=Cells(intCount, 12)
            Cells(i, j + 1).Copy Destination:=Cells(intCount, 13)
        End If
    Next j
Next i
End Sub

Bildbeschreibung hier eingeben

verwandte Informationen