Here's a macro version:
Option Explicit
Sub TableToList()
Application.ScreenUpdating = False
Dim Origin As Range, _
Destination As Range, _
OCell As Range, _
DCell As Range, _
Table As Worksheet, _
ListSheet As Worksheet, _
DestRow As Long
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "ListSheet"
Set ListSheet = Sheets("ListSheet")
Set Table = Sheets("Sheet1")
With Table
Set Origin = .Range("A2", .Cells(Rows.Count, "A").End(xlUp))
Set Destination = .Range("B1", .Cells(1, Columns.Count).End(xlToLeft))
End With
' only copy values from the upper triangle of the table
For Each OCell In Origin
For Each DCell In Destination
If OCell.Row < DCell.Column Then
DestRow = DestRow + 1
ListSheet.Cells(DestRow, "A").Value = OCell.Value
ListSheet.Cells(DestRow, "B").Value = DCell.Value
ListSheet.Cells(DestRow, "C").Value = Table.Cells(OCell.Row, DCell.Column).Value
End If
Next DCell
Next OCell
Application.ScreenUpdating = True
End Sub
Bookmarks