1

У меня есть лист Excel, как

A 1 2 3 4
B 1 2
C 1 2 3 4 5 

Мне нужно, чтобы вывод выглядел как

A 1
A 2
A 3
A 4
B 1
B 2
C 1
C 2
C 3
C 4
C 5

Буду признателен, если кто-нибудь поможет найти решение для этого

1 ответ1

2

Вам нужно добиться этого с помощью кода VBA.

Предполагая, что ваш входной лист называется "input", а ваш выходной лист называется "output" и что входные данные запускают ячейку A1 без заголовков, будет работать следующий код:

Sub MakeOutput()

    Dim iInputRow As Long
    Dim iInputColumn As Long
    Dim iOutputRow As Long

    iOutputRow = 1 '- counter for which row to paste to
    '- loop through each row on the input sheet
    For iInputRow = 1 To Sheets("Input").Range("A" & Sheets("Input").Rows.Count).End(xlUp).Row
        '- loop through each column inside of each row
        For iInputColumn = 2 To Sheets("Input").Cells(iInputRow, 1).End(xlToRight).Column
            Sheets("Output").Range("A" & iOutputRow).Value = Sheets("Input").Range("A" & iInputRow).Value
            Sheets("Output").Range("B" & iOutputRow).Value = Sheets("Input").Cells(iInputRow, iInputColumn).Value
            iOutputRow = iOutputRow + 1
        Next iInputColumn
    Next iInputRow

End Sub

Это делает то, что он проходит по каждой строке, если ваши входные данные начинаются с A1 и заканчиваются последней ячейкой в A, в которой есть данные.

Затем в каждой строке он проходит по каждому заполненному столбцу.

Для каждого из этих столбцов данных в вашем входном листе он копирует значения этой пары в выходной лист.

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