I think this does the trick:
Option Explicit
Sub test()
Dim a(), b As Variant
a() = [{1,2,3,100,101,102,4,5,6,103,104,105,7,8,9,106,107,108}]
b = SplitArray(a, 3)
End Sub
Function SplitArray(inArray As Variant, groupNum As Long) As Variant
Dim s, iRow, iCol, iCol1, iCol2, upLim, upLim1, upLim2 As Long
ReDim outArray(1 To 2, 1 To UBound(inArray))
iCol1 = 1 - groupNum
iCol2 = 1 - groupNum
iRow = 2
For s = 1 To UBound(inArray)
If s Mod groupNum = 1 Then
If iRow = 2 Then
iRow = 1
iCol1 = iCol1 + groupNum
iCol = iCol1
Else
iRow = 2
iCol2 = iCol2 + groupNum
iCol = iCol2
End If
End If
outArray(iRow, iCol) = inArray(s)
iCol = iCol + 1
Next s
For iCol = 1 To UBound(outArray, 1)
If IsEmpty(outArray(1, iCol)) = True Then
upLim1 = iCol - 1
Exit For
End If
Next iCol
For iCol = 2 To UBound(outArray, 2)
If IsEmpty(outArray(2, iCol)) = True Then
upLim2 = iCol - 1
Exit For
End If
Next iCol
upLim = WorksheetFunction.Max(upLim1, upLim2)
ReDim Preserve outArray(1 To 2, 1 To upLim)
SplitArray = outArray
End Function
A little more testing and I'll mark as solved.