ссылка на вопрос и ответ ниже, как сгенерировать все возможные 3-значные комбинации цифр 0-6

у меня похожий случай (нужно сгенерировать все возможные комбинации), но для набора значений, как в таблице ниже, суммарные возможности составят 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. Помогите мне, пожалуйста.

2 ответа2

0

Вот скрипт, который можно легко настроить в 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
0

это было бы намного проще, используя язык программирования. Просто загрузите ваши значения в массивы (a, b, c, d, e), а затем переберите их во вложенных циклах for. Может быть, что-то подобное можно применить к Excel?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .