Nhiều bạn có nhu cầu tạo tổ hợp, mình tạo Function CreateToHop( mảng du lieu ), các bạn góp ý thêm cho hoàn chỉnh
Sub ví dụ

Mã:
Function CreateToHop(ByVal sArr As Variant) As Variant
'CreateToHop: Liet ke to hop N phan tu cua mang "sArr"
'sArr: Là Array hoac Range, neu khac se tra ve "Empty"
Dim aRow(), Res(), sCol&, sRow&, N&, i&, j&, iR&
If TypeName(sArr) = "Variant()" Then
sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
ElseIf TypeName(sArr) = "Range" Then
sRow = sArr.Rows.Count: sCol = sArr.Columns.Count
Else
Exit Function
End If
ReDim aRow(1 To sCol + 1)
aRow(sCol + 1) = 1
For j = sCol To 1 Step -1
aRow(j) = sRow * aRow(j + 1)
Next j
N = aRow(1)
ReDim Res(1 To N, 1 To sCol)
For i = 1 To N
For j = 1 To sCol
iR = ((i - 1) Mod aRow(j)) \ aRow(j + 1) + 1 'Thu tu dong du lieu
Res(i, j) = sArr(iR, j)
Next j
Next i
CreateToHop = Res
End Function
Mã:
Sub Main()
Dim Res As Variant
Range("G2:K1000000").ClearContents
Res = CreateToHop(Range("A2:C4").Value)
Res = CreateToHop(Range("A2:C4"))
If Res <> Empty Then Range("G2").Resize(UBound(Res, 1), UBound(Res, 2)) = Res
End Sub