Вот некоторый код VBA, который находит последнюю строку / столбец, использованный в ваших исходных данных, и затем зацикливает это, чтобы произвести вывод, который вы ищете.
Sub sFixData()
Dim ws As Worksheet
Dim lngLastCol As Long
Dim lngLastRow As Long
Dim lngLoop1 As Long
Dim lngLoop2 As Long
Dim lngRow As Long
Set ws = Sheets("Sheet3")
lngLastCol = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column
lngLastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
lngRow = 3
For lngLoop1 = 3 To lngLastCol
For lngLoop2 = 3 To lngLastRow
ws.Cells(lngRow, 7) = ws.Cells(lngLoop2, 2)
ws.Cells(lngRow, 8) = ws.Cells(lngLoop2, lngLoop1)
ws.Cells(lngRow, 9) = ws.Cells(2, lngLoop1)
lngRow = lngRow + 1
Next lngLoop2
Next lngLoop1
End Sub
С уважением,