como gerar todas as possibilidades de combinação para um conjunto de números ou intervalos?

0

referência a perguntas e respostas abaixo, como gerar toda a combinação possível de 3 dígitos dos números 0-6

Eu tenho casos semelhantes (preciso gerar todas as combinações possíveis), mas para um conjunto de valores como na tabela abaixo, o total de possibilidades será de 3024 combinações

    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 

combinações serão parecidas com

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

manualmente, vai demorar uma eternidade e francamente falando, eu não sou um especialista em excel. por favor me ajude.

    
por lost with MS excel 20.08.2015 / 15:55

2 respostas

0

isso seria muito mais fácil usando uma linguagem de programação. Basta carregar seus valores em arrays (a, b, c, d, e) e, em seguida, iterar por eles em loops aninhados. Talvez algo como isso possa se aplicar ao excel?

    
por 20.08.2015 / 17:13
0

Aqui está um script que pode ser facilmente ajustado em vba para fazer o que você quer.

Ele assume que os dados estão nas colunas A-C (sem cabeçalho) e nas colunas E-G. Para mais colunas de entrada, você precisaria de mais loops aninhados. Também pode haver alguns ajustes dependendo de onde você deseja colar dados, mas deve chegar a 90% do caminho até lá.

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
    
por 20.08.2015 / 23:01