![VBA для размещения нескольких столбцов с двумя строками в Excel в их собственных строках](https://rvso.com/image/1586916/VBA%20%D0%B4%D0%BB%D1%8F%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85%20%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%BE%D0%B2%20%D1%81%20%D0%B4%D0%B2%D1%83%D0%BC%D1%8F%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%D0%BC%D0%B8%20%D0%B2%20Excel%20%D0%B2%20%D0%B8%D1%85%20%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%D1%85.png)
У меня есть лист, который выглядит так:
A | B | C | D | E |
----------------------------------------
62| Value1| Value2| | |
345| Value3| Value4| Value5| Value6|
17| Value7| Value0| | |
111| Value8| Value9| ValueA|ValueC |
Я хотел бы преобразовать его вот так (A — стандартная ячейка, следующие две ячейки — B&C, D&E,..):
A | B | C |
-----------------------
62| Value1|Value2|
345| Value3|Value4|
345| Value5|Value6|
17| Value7|Value0|
111| Value8|Value9|
111| ValueA|ValueC|
В настоящее время я использую приведенный ниже макрос для преобразования только одной строки, но мне нужно, чтобы она содержала два значения ячеек.
Sub Transform()
Dim rowStr As String
Dim rowIndex As Integer
rowIndex = 1
For Each Cell In Sheet1.Range("A1:E5")
If Cell.Column = 1 Then
rowStr = Cell.Value
ElseIf Not IsEmpty(Cell.Value) Then
Sheet2.Cells(rowIndex, 1) = rowStr
Sheet2.Cells(rowIndex, 2) = Cell.Value
rowIndex = rowIndex + 1
End If
Next Cell
End Sub
решение1
Я бы это использовал.
Sub Transform_2()
Dim c As Range
Dim rngFirstCol As Range
Dim rowIndex As Long
Dim j As Long
rowIndex = 1
Set rngFirstCol = Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(1, 1).End(xlDown))
For Each c In rngFirstCol
For j = 0 To rngFirstCol.CurrentRegion.Columns.Count - 2 Step 2
If c.Offset(, j + 1).Value <> "" Or c.Offset(, j + 2).Value <> "" Then
Sheet2.Cells(rowIndex, 1).Value = c.Value
Sheet2.Cells(rowIndex, 2).Resize(1, 2).Value = c.Offset(, j + 1).Resize(1, 2).Value
rowIndex = rowIndex + 1
End If
Next
Next
End Sub
Он автоматически определяет, сколько строк в вашей таблице данных. Если хотите, можете задать это сами, изменив
Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(1, 1).End(xlDown))
кссылка на столбецнравиться
Sheet1.Range("A1:A6")