Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用宏在多个列上生成组合_Vba - Fatal编程技术网

Vba 使用宏在多个列上生成组合

Vba 使用宏在多个列上生成组合,vba,Vba,根据=combi(20,6),存在38760种可能的组合 我需要运行一个宏,它可以列出超过6列的所有可能的组合 因此,我需要A列中的前6460个组合,B列中的下6460个组合,等等。一直到F列。如何使用VBA实现这一点?这是有效的VB代码,我假设您能够自己将结果放入excel单元格中…:) 问候, AKDA递归很容易实现,但是您希望在单元格中显示什么?名字,字符,数字?我想让它显示像1,2,3,4,5,6这样的数字。。。1,12,13,14,15,16, ... 1,16,17,18,19,20

根据=combi(20,6),存在38760种可能的组合

我需要运行一个宏,它可以列出超过6列的所有可能的组合


因此,我需要A列中的前6460个组合,B列中的下6460个组合,等等。一直到F列。如何使用VBA实现这一点?

这是有效的VB代码,我假设您能够自己将结果放入excel单元格中…:)

问候,


AKDA

递归很容易实现,但是您希望在单元格中显示什么?名字,字符,数字?我想让它显示像1,2,3,4,5,6这样的数字。。。1,12,13,14,15,16, ... 1,16,17,18,19,20 ... 等等?是的。列A将从1,2,3,4,5,6开始,然后下一行将是1,2,3,4,5,7,然后是1,2,3,4,5,8等
Private Sub Form_Load()
    'This is the call that inits the recursion
    CombineNumbers 20, 6
End Sub

Private Function CombineNumbers(Num_Elements As Long, Num_Selected As Long) As String()
    Dim Buff() As String
    ReDim Buff(BinomCoeff(Num_Elements, Num_Selected) - 1)

    CombineNumbersRecursion 1, Num_Elements, Num_Selected, Buff, 0&

    Dim Value

    For Each Value In Buff
        Debug.Print Value
    Next Value

End Function

Private Sub CombineNumbersRecursion(Start_Element As Long, End_Element As Long, _
    Num_Selected As Long, Buff() As String, BuffStartIndex As Long, _
    Optional CurrStr As String = vbNullString)

    If (Num_Selected) Then
        'Recursion
        Dim i As Long

        For i = Start_Element To End_Element
            CombineNumbersRecursion i + 1, End_Element, Num_Selected - 1&, Buff, _
                BuffStartIndex, IIf(Len(CurrStr), CurrStr & ", " & CStr(i), CStr(i))
        Next i
    Else
        'Break recursion
        Buff(BuffStartIndex) = CurrStr
        BuffStartIndex = BuffStartIndex + 1&
        Exit Sub
    End If
End Sub

Private Function BinomCoeff(n As Long, k As Long) As Long

    Dim i As Long

    BinomCoeff = 1&

    For i = 1& To k
        BinomCoeff = BinomCoeff * ((n + 1& - i&) / i&)
    Next i

End Function