我有一个包含 8 个元素(A、B、C、D、E、F、G、H)的数组,我想在 VBA 中对这些元素进行完整组合,从 case 开始,其中只有 A 重复 8 次每个 excel 列,然后逐步添加剩余的字母。 我不是 VBA 专家,也不是编程专家。 我已经能够制作表格的第一部分,但我不知道如何继续。
Dim MyArray(7) As String
MyArray(0) = "A(1)"
MyArray(1) = "B(1)"
MyArray(2) = "C(1)"
MyArray(3) = "D(1)"
MyArray(4) = "E(1)"
MyArray(5) = "F(1)"
MyArray(6) = "G(1)"
MyArray(7) = "H(1)"
Dim i
Dim j
Dim k
Dim x
Dim Col
Col = 8
Dim arrayCount As String
arrayCount = Application.CountA(MyArray)
For k = 0 To 0
For i = 2 To 9
For j = Col To 8
Cells(i, j) = MyArray(k)
Col = Col - 1
Exit For
Next j
Next i
Next k
你需要总共有 8 个循环:
Dim MyArray(7) As String
MyArray(0) = "A"
MyArray(1) = "B"
MyArray(2) = "C"
MyArray(3) = "D"
MyArray(4) = "E"
MyArray(5) = "F"
MyArray(6) = "G"
MyArray(7) = "H"
Dim a As Long
Dim i As Long
Dim j As Long
Dim k As Long
Dim l As Long
Dim m As Long
Dim n As Long
Dim o As Long
Dim p As Long
Dim cnt As Long
cnt = 8& * 7 * 6 * 5 * 4 * 3 * 2 * 1 + 8& * 7 * 6 * 5 * 4 * 3 * 2 + 8& * 7 * 6 * 5 * 4 * 3 + 8& * 7 * 6 * 5 * 4 + 8& * 7 * 6 * 5 + 8& * 7 * 6 + 8& * 7 + 8
Dim outArray() As String
ReDim outArray(1 To cnt, 1 To 8)
Dim z As Long
z = 1
For a = 0 To 7
For i = 0 To 7
If a < 7 Then
For j = 0 To 7
If j <> i Then
If a < 6 Then
For k = 0 To 7
If k <> j And k <> i Then
If a < 5 Then
For l = 0 To 7
If l <> k And l <> j And l <> i Then
If a < 4 Then
For m = 0 To 7
If m <> l And m <> k And m <> j And m <> i Then
If a < 3 Then
For n = 0 To 7
If n <> m And n <> l And n <> k And n <> j And n <> i Then
If a < 2 Then
For o = 0 To 7
If o <> n And o <> m And o <> l And o <> k And o <> j And o <> i Then
If a < 1 Then
For p = 0 To 7
If p <> o And p <> n And p <> m And p <> l And p <> k And p <> j And p <> i Then
outArray(z, 1) = MyArray(i)
outArray(z, 2) = MyArray(j)
outArray(z, 3) = MyArray(k)
outArray(z, 4) = MyArray(l)
outArray(z, 5) = MyArray(m)
outArray(z, 6) = MyArray(n)
outArray(z, 7) = MyArray(o)
outArray(z, 8) = MyArray(p)
z = z + 1
End If
Next p
Else
outArray(z, 1) = MyArray(i)
outArray(z, 2) = MyArray(j)
outArray(z, 3) = MyArray(k)
outArray(z, 4) = MyArray(l)
outArray(z, 5) = MyArray(m)
outArray(z, 6) = MyArray(n)
outArray(z, 7) = MyArray(o)
z = z + 1
End If
End If
Next o
Else
outArray(z, 1) = MyArray(i)
outArray(z, 2) = MyArray(j)
outArray(z, 3) = MyArray(k)
outArray(z, 4) = MyArray(l)
outArray(z, 5) = MyArray(m)
outArray(z, 6) = MyArray(n)
z = z + 1
End If
End If
Next n
Else
outArray(z, 1) = MyArray(i)
outArray(z, 2) = MyArray(j)
outArray(z, 3) = MyArray(k)
outArray(z, 4) = MyArray(l)
outArray(z, 5) = MyArray(m)
z = z + 1
End If
End If
Next m
Else
outArray(z, 1) = MyArray(i)
outArray(z, 2) = MyArray(j)
outArray(z, 3) = MyArray(k)
outArray(z, 4) = MyArray(l)
z = z + 1
End If
End If
Next l
Else
outArray(z, 1) = MyArray(i)
outArray(z, 2) = MyArray(j)
outArray(z, 3) = MyArray(k)
z = z + 1
End If
End If
Next k
Else
outArray(z, 1) = MyArray(i)
outArray(z, 2) = MyArray(j)
z = z + 1
End If
End If
Next j
Else
outArray(z, 1) = MyArray(i)
z = z + 1
End If
Next i
Next a
ActiveSheet.Range("A1").Resize(cnt, 8).Value = outArray