Sub ReArrange()
Dim lngLastRow As Long, lngRefRow As Long, lngCnt As Long
Dim DataArray() As Variant
lngLastRow = Cells.Find("*", [A1], xlValues, xlPart, xlByRows, xlPrevious, False).Row
ReDim DataArray(1 To Application.CountA(Range("A1:A" & lngLastRow).Value), 1 To 3)
For i = 1 To lngLastRow
If Len(Range("A" & i).Value) > 0 Then
If Len(Range("A" & i + 1).Value) > 0 Then
lngRefRow = i
lngCnt = lngCnt + 1
Else
lngRefRow = Range("A" & i).End(xlDown).Row - 1
If lngRefRow > lngLastRow Then lngRefRow = lngLastRow
lngCnt = lngCnt + 1
End If
DataArray(lngCnt, 1) = Range("A" & i).Value
If i = lngRefRow Then
DataArray(lngCnt, 2) = Range("B" & i).Value
DataArray(lngCnt, 3) = Range("C" & i).Value
Else
DataArray(lngCnt, 2) = Replace(Application.Trim(Join(Application.Transpose(Range("B" & i & ":B" & lngRefRow).Value), " ")), " ", ",")
DataArray(lngCnt, 3) = Replace(Application.Trim(Join(Application.Transpose(Range("C" & i & ":C" & lngRefRow).Value), " ")), " ", ",")
End If
End If
Next i
Sheets(2).UsedRange.Delete
Sheets(2).Range("A1").Resize(lngCnt, 3).Value = DataArray
End Sub