|
Option Explicit
Sub test()
Dim ar(), j&
ReDim ar(1 To 3)
For j = 1 To 3
ar(j) = Cells(3, (j - 1) * 11 + 5).CurrentRegion.Value
Next
ar = cartesianProduct2(ar)
[AL2].CurrentRegion.ClearContents
[AL2].Resize(UBound(ar), UBound(ar, 2)) = ar
End Sub
Function cartesianProduct2(ByVal ar) As Variant
Dim br&(), vResult(), iGroup&, i&, j&, m&, n&, x&
n = UBound(ar): iGroup = 1
For i = 1 To UBound(ar)
m = m + UBound(ar(i), 2)
iGroup = iGroup * UBound(ar(i))
Next i
ReDim br(1 To n)
ReDim vResult(1 To iGroup, 1 To m)
For j = 1 To n: br(j) = 1: Next
iGroup = 0
Do
iGroup = iGroup + 1
x = 0
For j = 1 To n
For i = 1 To UBound(ar(j), 2)
If Len(ar(j)(br(j), i)) Then
x = x + 1
vResult(iGroup, x) = ar(j)(br(j), i)
End If
Next i
Next
For j = n To 1 Step -1
br(j) = br(j) + 1
If br(j) <= UBound(ar(j)) Then Exit For Else br(j) = 1
Next
Loop Until j = 0
cartesianProduct2 = vResult
End Function
|
|