VBA для размещения нескольких столбцов с двумя строками в Excel в их собственных строках

VBA для размещения нескольких столбцов с двумя строками в Excel в их собственных строках

У меня есть лист, который выглядит так:

   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")

Связанный контент