Tested:
Sub Pivot()
Const NUM_MONTHS As Long = 3
Const NUM_PROPS As Long = 3
Dim rng As Range, rngDest As Range, arrProps, x
'first block of source data
Set rng = Sheets("Sheet1").Range("A2").Resize(NUM_MONTHS, 5)
'header labels
arrProps = Application.Transpose(rng.Rows(1).Offset(-1, 0). _
Cells(3).Resize(1, NUM_PROPS).Value)
'top-left of destination table
Set rngDest = Sheets("Sheet1").Range("J1")
'set up headers
With rngDest
.Value = "Group"
.Offset(0, 1).Value = "property"
.Offset(0, 2).Resize(1, NUM_MONTHS).Value = _
Application.Transpose(rng.Columns(2).Value)
End With
Set rngDest = rngDest.Offset(1, 0)
'copy data
Do While rng.Cells(1).Value <> ""
rngDest.Value = rng.Cells(1, 1).Value 'group
'property names
rngDest.Offset(0, 1).Resize(NUM_PROPS, 1).Value = arrProps
'property values
For x = 1 To NUM_PROPS
rngDest.Offset(x - 1, 2).Resize(1, NUM_MONTHS).Value = _
Application.Transpose(rng.Columns(2 + x).Value)
Next x
'move to next block
Set rng = rng.Offset(NUM_MONTHS, 0)
Set rngDest = rngDest.Offset(3, 0)
Loop
End Sub