Dzielenie jednego wiersza z wieloma kolumnami na wiele wierszy

0

Więc podniosłem ten kod VBA ...

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

Mam następujący scenariusz poniżej i nie zapewniam płynnego działania makra (ponieważ nie jestem przyzwyczajony do kodowania w niczym). Próbowałem wymyślić powyższy kod, ale po prostu nie ma sensu, jak kolumny działają w tej kolejności. Czy ktoś może pomóc?

Mam te dane

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

Muszę mieć następujące kolumny w rzędzie:

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

Czy ktoś może w tym pomóc?

Mario
źródło

Odpowiedzi:

0

Zamiast próbować matematyki, po prostu stań co 2 w kolumnach, zaczynając od trzeciej kolumny. To sprawia, że ​​matematyka jest trochę prostsza:

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

wprowadź opis zdjęcia tutaj

Scott Craner
źródło