Vba 使用宏在多个列上生成组合
根据=combi(20,6),存在38760种可能的组合 我需要运行一个宏,它可以列出超过6列的所有可能的组合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
因此,我需要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