如何生成一组数字或范围的所有组合可能性?

如何生成一组数字或范围的所有组合可能性?

参考下面的问题和答案, 如何生成 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

相关内容