thanks snb for getting me into the habit of using index function with arrays.
that said, below will handle 1st and 4th steps.
2nd and 3rd not clear to me.
since they are about formatting, record a macro while manually formatting the cells in Columns A and B of sheet List2. then post your recorded macro here so we can insert/adopt it to below code.
try this code with a copy of your file.
Sub vbax_54847_Create_Separate_Tables_Each_Row_Transposed()
'http://www.vbaexpress.com/forum/showthread.php?54847-Transponse-help
Dim j As Long, k As Long
Dim pList
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
Worksheets("List1").Copy After:=Worksheets(Worksheets.Count)
With ActiveSheet
.Rows(1).Delete
.UsedRange.Rows(1).SpecialCells(xlCellTypeBlanks) = Chr(10)
pList = Application.Transpose(.Cells(1).CurrentRegion.Value)
.Delete
End With
k = 1
With Worksheets("List2")
.Cells.Clear 'clear existing data
For j = 2 To UBound(pList, 2)
.Cells(1, k).Resize(UBound(pList)).Value = Application.Index(pList, , 1)
.Cells(1, k + 1).Resize(UBound(pList)).Value = Application.Index(pList, , j)
k = k + 3
Next
End With
End Sub
PS: a table's top left cell must be A1 and first column (generally record id's) and first row (headers or field names) must contain no blank cells. below line inserts a non printinting character into blank cells in the header row. i chose Chr 10.
.UsedRange.Rows(1).SpecialCells(xlCellTypeBlanks) = Chr(10)