como determinar quais valores em um determinado conjunto de células serão adicionados a um intervalo numérico

2

Em outras palavras, estou procurando um intervalo de soma que consista em combinações de células de uma matriz. Dado um conjunto de números:

1 720 56 17 59 120 153 203 39 1 690 583 582 561 256 310 232 95 108 16 26 59 538 445 42 149

( call this A1:A26 )

O intervalo de soma que estou procurando é 1000-1500 . Gostaria de poder ver quais combinações de quaisquer células de A1:A5 terão uma soma dentro desse intervalo. Como tirar a soma de ( A23, A24, A26 ) ou a soma de ( A2, A11 ).

O número de células ou combinações não importa, contanto que a soma esteja dentro do intervalo determinado. Além disso, preciso identificar as células usadas em cada combinação.

Sou grato a qualquer pessoa que possa tornar minha vida mais fácil.
Obrigado.

    
por Eric 12.07.2013 / 21:26

1 resposta

1

Vamos para uma direção diferente e mostremos o que duas células podem ser somadas para encontrar a imagem abaixo.

Ainda é um grande desafio para uma pergunta. Vou continuar jogando com uma resposta VBA mais completa, se possível.

Eudevoquebrarporumtempo,masaquiestáoqueeufizparamostrarosvaloresdistintosqueatenderiamaoscritérios.EunãosoudeformaalgumaumespecialistaemVBA,apenastomeiissocomoumaexperiênciadeaprendizado.Tenhocertezaqueeuquebreialgumasregras.

SubWhatCanSUM()DimlstAsRangeDimiAsIntegerDimjAsIntegerDimkAsIntegerDimilst1AsIntegerDimilst2AsIntegerDimilst3AsIntegerDimilst4AsIntegerDimilst5AsIntegerDimilst6AsIntegerDimilst7AsIntegerDimilst8AsIntegerDimilst9AsIntegerDimilst10AsIntegerDimilst11AsIntegerDimilst12AsIntegerDimilst13AsIntegerDimilst14AsIntegerDimilst15AsIntegerDimilst16AsIntegerDimilst17AsIntegerDimilst18AsIntegerDimilst19AsIntegerDimilst20AsIntegerDimilst21AsIntegerDimilst22AsIntegerDimilst23AsIntegerDimilst24AsIntegerDimilst25AsIntegerDimilst26AsIntegerDimlwrlmtAsIntegerDimuprlmtAsIntegerDimresultAsIntegerSetlst=Sheet1.Range("lstNumbers")
i = 1
j = 1
k = 1
ilst1 = lst.Item(1).Value
ilst2 = lst.Item(2).Value
ilst3 = lst.Item(3).Value
ilst4 = lst.Item(4).Value
ilst5 = lst.Item(5).Value
ilst6 = lst.Item(6).Value
ilst7 = lst.Item(7).Value
ilst8 = lst.Item(8).Value
ilst9 = lst.Item(9).Value
ilst10 = lst.Item(10).Value
ilst11 = lst.Item(11).Value
ilst12 = lst.Item(12).Value
ilst13 = lst.Item(13).Value
ilst14 = lst.Item(14).Value
ilst15 = lst.Item(15).Value
ilst16 = lst.Item(16).Value
ilst17 = lst.Item(17).Value
ilst18 = lst.Item(18).Value
ilst19 = lst.Item(19).Value
ilst20 = lst.Item(20).Value
ilst21 = lst.Item(21).Value
ilst22 = lst.Item(22).Value
ilst23 = lst.Item(23).Value
ilst24 = lst.Item(24).Value
ilst25 = lst.Item(25).Value
ilst26 = lst.Item(26).Value
lwrmt = 1000
uprlmt = 1500
result = 0

'===============================================================================================
'Create worksheet if it doesnt exist.

Dim wrslt As Worksheet
Const strSheetName As String = "Results"

Set wrslt = Nothing
On Error Resume Next
Set wrslt = ActiveWorkbook.Worksheets(strSheetName)
On Error GoTo 0

If wrslt Is Nothing Then
    Worksheets.Add.Name = strSheetName
End If
'===============================================================================================
'Little header messagge

Set wrslt = ActiveWorkbook.Worksheets(strSheetName)
wrslt.Cells.Delete
wrslt.Cells(1, 1).Value = "Resulting Additions that 2 distinct cells that sum up to >=" & lwrmt & " and <=" & uprlmt

'===============================================================================================
'The Loop

For j = 1 To lst.Rows.Count

    For i = 1 To lst.Rows.Count
    ilst2 = lst.Item(i + 1).Value
        result = (ilst1 + ilst2)
        If ilst1 <> ilst2 And result >= lwrmt And result <= uprlmt Then
            wrslt.Cells(i + 1, j).Value = ilst1 & " + " & ilst2
        End If
    Next i

    ilst1 = lst.Item(j + 1).Value

Next j

MsgBox ("Done")
'===============================================================================================
'Formatting

wrslt.Range("A1:M1").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge

wrslt.Cells.EntireColumn.AutoFit
wrslt.Cells.SpecialCells(xlCellTypeConstants, 23).Select

End Sub

A macro produz a figura abaixo.

    
por 31.07.2013 / 15:08