Итак, я взял этот код 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
У меня есть следующий сценарий ниже, и макрос не работает гладко (так как я не привык к кодированию чего-либо). Я пытался разобраться в коде выше, но он просто не имеет смысла относительно того, как столбцы работают в таком порядке. Может ли кто-нибудь помочь?
У меня есть эти данные
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
Мне нужно, чтобы столбцы располагались в ряд следующим образом:
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
Может ли кто-нибудь помочь с этим?
решение1
Так что вместо того, чтобы пытаться делать математику, давайте просто сделаем шаг через каждые 2 в столбцах, начиная с третьего столбца. Это немного упрощает математику:
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