2

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

   A   |   B   |   C   |   D   |   E   |
----------------------------------------
     62| Value1| Value2|       |       |
    345| Value3| Value4| Value5| Value6|
     17| Value7|       |       |       |
    111| Value8| Value9| ValueA|       |

Я хотел бы преобразовать это в это:

   A   |   B   |
----------------
     62| Value1|
     62| Value2|
    345| Value3|
    345| Value4|
    345| Value5|
    345| Value6|
     17| Value7|
    111| Value8|
    111| Value9|
    111| ValueA|

Это кажется достаточно распространенной процедурой (я нормализую таблицу), что Excel будет иметь это консервы. Есть ли простой способ сделать это, или все сводится к написанию макроса или VBA?

1 ответ1

2

В Excel есть встроенная функция транспонирования, которая переключает строки и столбцы, но не подходит для вашего сценария. Единственное, что я думаю, будет работать - это функция VBA. Мой VB немного ржавый, но этот должен работать. Вам нужно будет изменить диапазон «A1:E5», чтобы охватить ячейки, которые вы хотите преобразовать. И это копирует значения из первого листа с именем "Sheet1" во второй с именем "Sheet2". Если у вас есть данные в Sheet2 или у вас разные именованные таблицы, вам нужно будет изменить код.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .