参考下面的问题和答案, 如何生成 0-6 所有可能的 3 位数字组合
我有类似的情况(需要生成所有可能的组合),但对于下表中的一组值,总可能性将是 3024 种组合
A B C D E
54 23 43 1 1
21 45 433 2 51
25 65 456 3 3
65 66 5678 100
77 980 5
90 878 6
909
组合看起来就像
A B C D E
54 23 43 1 1
54 23 43 1 51
54 23 43 1 3
54 23 43 2 1
54 23 43 2 51
54 23 43 2 3
...
...
...
65 909 878 6 3
手动操作会花费很长时间,而且坦率地说,我不是 Excel 专家。请帮帮我。
答案1
使用编程语言会更容易。只需将值加载到数组(a、b、c、d、e)中,然后在嵌套的 for 循环中迭代它们。也许类似的东西可以应用于 excel?
答案2
这是一个脚本,可以在 vba 中轻松调整以执行您想要的操作。
它假设数据在 AC 列(无标题)中,并粘贴在 EG 列中。对于更多输入列,您需要更多嵌套循环。还可以根据您想要粘贴数据的位置进行一些调整,但应该可以完成 90% 的操作。
Sub calcCombinations()
Dim lastRowA As Long, lastRowB As Long, lastRowC As Long
Dim CurRowA As Long, CurRowB As Long, CurRowC As Long, pasteRow As Long
pasteRow = 1
With ActiveSheet
lastRowA = .Range("A" & .Rows.Count).End(xlUp).Row
lastRowB = .Range("B" & .Rows.Count).End(xlUp).Row
lastRowC = .Range("C" & .Rows.Count).End(xlUp).Row
For CurRowA = 1 To lastRowA
For CurRowB = 1 To lastRowB
For CurRowC = 1 To lastRowB
.Range("E" & pasteRow).Value = .Range("A" & CurRowA).Value
.Range("F" & pasteRow).Value = .Range("B" & CurRowB).Value
.Range("G" & pasteRow).Value = .Range("C" & CurRowC).Value
pasteRow = pasteRow + 1
Next
Next
Next
End With
End Sub