8个值的组合

问题描述 投票:0回答:1

我有一个包含 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

附上我想要得到的东西

vba combinations
1个回答
1
投票

你需要总共有 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

© www.soinside.com 2019 - 2024. All rights reserved.