• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Welke combinatie van getallen uit rij 1 vormt de som van een vd getallen uit rij 2

Status
Niet open voor verdere reacties.

Fun2Hike

Gebruiker
Lid geworden
27 jul 2022
Berichten
10
Beste mensen,

IK weet niet of hier een oplossing voor is maar ik zoek naar een manier om groep getallen die overeen komen met de som van andere getallen. Wat bedoel ik:

De rijen bestaan uit een (1) rij van een verzameling van getallen en een (1) rij met het resultaat van de som van enkele getallen uit rij 1.
Hoe zoek ik uit welk deel (de som) van de verzameling getallen uit rij 1 gelijk is aan een van de getallen in rij 2.

Voorbeeld:

Schermafbeelding 2022-07-27 om 07.49.09.png

Alvast hartelijk dank voor suggesties/ hulp

Mvgr
Frans
 

Bijlagen

Hoe lang is rij 1 maximaal?
En van hoeveel getallen wordt maximaal de som genomen?
 
Hoe lang is rij 1 maximaal?
En van hoeveel getallen wordt maximaal de som genomen?

Dag Hans, bedankt voor uw reactie. Heel concreet gaat het om de volgende getallen.

Rij 1: [TABLE="width: 73"]
[TR]
[TD="class: xl63, width: 73, align: right"]169,43[/TD]
[/TR]
[TR]
[TD="class: xl63, align: right"]58,85[/TD]
[/TR]
[TR]
[TD="class: xl64, align: right"]892,48[/TD]
[/TR]
[TR]
[TD="class: xl63, align: right"]217,51[/TD]
[/TR]
[TR]
[TD="class: xl63, align: right"]296,27[/TD]
[/TR]
[TR]
[TD="class: xl63, align: right"]586,45[/TD]
[/TR]
[TR]
[TD="class: xl63, align: right"]58,85[/TD]
[/TR]
[TR]
[TD="class: xl64, align: right"]947,58[/TD]
[/TR]
[TR]
[TD="class: xl63, align: right"]332,76[/TD]
[/TR]
[TR]
[TD="class: xl63, align: right"]296,27[/TD]
[/TR]
[TR]
[TD="class: xl63, align: right"]533,69[/TD]
[/TR]
[TR]
[TD="class: xl64, align: right"]2.670,59[/TD]
[/TR]
[TR]
[TD="class: xl63, align: right"]296,30[/TD]
[/TR]
[TR]
[TD="class: xl63, align: right"]70,25[/TD]
[/TR]
[TR]
[TD="class: xl64, align: right"]1.319,28[/TD]
[/TR]
[TR]
[TD="class: xl63, align: right"]531,70[/TD]
[/TR]
[TR]
[TD="class: xl65, align: right"]81,84[/TD]
[/TR]
[/TABLE]

Rij 2
[TABLE="width: 71"]
[TR]
[TD="class: xl65, width: 71, align: right"]8.480,94[/TD]
[/TR]
[TR]
[TD="class: xl65, align: right"]879,16[/TD]
[/TR]
[/TABLE]
 
Dag Frans,

17 getallen in rij 1 is best veel.
Er zijn dan 2 tot de macht 17 = 131.072 verschillende sommen mogelijk.
Daar heb ik niet 1,2,3 een oplossing voor.

Echter ik zie dat de som van de getallen in rij 1 precies gelijk is aan de som van beide getallen in rij 2.
Dus als je 1 som vindt, heb je automatisch ook de som van het andere getal gevonden (want dat is de som van de overgebleven getallen in rij 1).
 
Dag Frans,

17 getallen in rij 1 is best veel.
Er zijn dan 2 tot de macht 17 = 131.072 verschillende sommen mogelijk.
Daar heb ik niet 1,2,3 een oplossing voor.

Echter ik zie dat de som van de getallen in rij 1 precies gelijk is aan de som van beide getallen in rij 2.
Dus als je 1 som vindt, heb je automatisch ook de som van het andere getal gevonden (want dat is de som van de overgebleven getallen in rij 1).

Klopt Hans, alleen blijven het veel combinaties die naar het eindgetal leiden. Hopelijk is er met een combi van formules mogelijk die dit rekensommetje "even" kunnen maken...
 
Klopt Hans, alleen blijven het veel combinaties die naar het eindgetal leiden. Hopelijk is er met een combi van formules mogelijk die dit rekensommetje "even" kunnen maken...

Na wat "Google" werk zag ik een mogelijke oplossing voorbij komen, nl: https://www.extendoffice.com/docume...nd-all-combinations-that-equal-given-sum.html

Het probleem daarbij is dat de oplossing voor een windows versie is en ik met een Macbook Pro werk. Bovendien zijn de formules voor een Engelse versie van excel geschreven. Daar worstel ik nu mee nondeju...

Ik ben nu zover dat ik onderstaande formule niet werkend krijg:

=IF(ISNUMBER(MATCH(ROWS($1:1),IF(INDEX(MOD(INT((List2-1)/2^(TRANSPOSE(List1)-1)),2),MATCH(TRUE,MMULT(MOD)" (INT((Lijst2-1)/2^(TRANSPOSE(Lijst1)-1)),2),Bereik1)=$C$2,0),),TRANSPOSE(Lijst1)),0)),"X", "")

Ik krijg dan de melding:
Schermafbeelding 2022-07-27 om 09.36.14.png

Kan het zijn dat de komma notatie aangepast moet worden in bv een puntkomma notatie?
 
Laatst bewerkt:
Ik heb op Excelforum.com bijgaande oplossing gevonden (met een macro) en die werkt vlot.
Zie bijlage.

Als er een oplossing is dan geeft deze macro binnen 1 seconde respons.
Als er geen oplossing is dan gebeurt er niets.

Ik heb geprobeerd 879,16 te vinden in jouw getallen, maar dat vindt deze macro niet.
Als ik vervolgens een som van een aantal producten zelf uitreken en die probeer dan vindt deze macro het meteen.

Ik denk dat er dus van jouw getallen geen som van 879,16 kan worden gemaakt.
 

Bijlagen

Laatst bewerkt:
Ik heb op Excelforum.com bijgaande oplossing gevonden (met een macro) en die werkt vlot.
Zie bijlage.

Als er een oplossing is dan geeft deze macro binnen 1 seconde respons.
Als er geen oplossing is dan gebeurt er niets.

Ik heb geprobeerd 879,16 te vinden in jouw getallen, maar dat vindt deze macro niet.
Als ik vervolgens een som van een aantal producten zelf uitreken en die probeer dan vindt deze macro het meteen.

Ik denk dat er dus van jouw getallen geen som van 879,16 kan worden gemaakt.

Top Hans, stel het erg op prijs dat je meedenkt.

Graag zou ik een fout in de optelling willen uitsluiten door de formule zoals ik deze bovenstaand heb beschreven nog even willen testen. Wellicht dat je even wilt meekijken om te zien waar hier de foutmelding door ontstaat. Zoals je inmiddels wel heb begrepen heb ik hier niet echt "kaas" van gegeten.

Ik heb in de uitvoering de instructie helemaal gevolg zoals deze in deze link wordt beschreven:
https://www.extendoffice.com/docume...nd-all-combinations-that-equal-given-sum.html
 
Hoi Frans,

Je gebruikt een Engelse formule en je krijgt een Nederlandstalige foutmelding.
Ik vermoed dat je een Nederlandstalige Excel-versie hebt.
Je moet dan de Engelse formule naar het Nederlands vertalen. Ook moeten de komma's worden vervangen door puntkomma's.
Dat kan heel makkelijk op deze website: Translator • Excel-Translator

Verder heb ik ook vertrouwen in de oplossing FindSum.xlsm met de macro die ik heb aangereikt.
 
Laatst bewerkt:
frans, ik weet dat er subjes zijn die de dichtstbijzijnde oplossing geven . als je interesse hebt, ga ik hem voor je opsporen.
 
je kan het anders ook met oplosser/solver proberen, maar die "subjes" van Frans zijn sneller :love:
 
Ik heb uitgezocht welke mogelijkheden in de buurt komen van 879,16.
879,67 is het dichtste bij.
Zie hieronder en in attachment op tabblad BRUTE FORCE

Schermafbeelding 2022-07-28 052837.png

(Voor een leesbare afbeelding even op klikken!)

NB: De bijlage BRUTO FORCE is nu geschikt voor het uitrekenen van alle mogelijke combinaties uit een rij van 13 getallen, maar zou nog eenvoudig kunnen worden uitgebreid.
 

Bijlagen

Laatst bewerkt:
de macro-versie van Brute Force
Code:
Sub BruteForce()
     Dim bit(), res
     t = Timer     'start chrono
     Set c = Sheets("Som met macro").Range("A2:A14")     'je cijfertjes
     a = Application.Transpose(c.Value)     'inlezen in array
     doel = Range("D2").Value     'je doelwaarde
     mymin = 1000000000#     'huidige afwijking (extreem hoog)
     ReDim bit(1 To UBound(a))     'dimensioneer hulparray

     Do     'start loop
          ptr = ptr + 1     'aantal keer dat loop werd gemaakt
          bit(1) = bit(1) + 1     '1e element 1 ophogen
          For i = 1 To UBound(bit) - 1     'alle elementen aflopen
               If bit(i) >= 2 Then     'zolang er een element op 2 (of meer staat, kan normaal niet)
                    bit(i) = 0: bit(i + 1) = bit(i + 1) + 1     'die op 0 en de volgende +1
               Else
                    Exit For     'klaar met deze kleine loop
               End If
          Next

          Delta = Abs(doel - WorksheetFunction.SumProduct(a, bit))     'afwijking tov doel met deze combinatie
          If Delta <= mymin Then     'kleiner dan vorige afwijking
               res = bit     'bitjes overnemen
               mymin = Delta     'nieuwe kleinere afwijking tov vroeger
          End If

     Loop While bit(UBound(bit)) < 2 And mymin > 0.00001     'loopje tot alle combinaties afgelopen zijn of totdat de afwijking verschrikkelijk klein geworden is

     c.Offset(, 1).Value = Application.Transpose(res)     'oplossing ernaast zetten
     MsgBox "afwijking oplossing : " & Format(mymin, "0.0000") & vbLf & "aantal loops : " & ptr & vbLf & "gevonden in : " & Format(Timer - t, "0.00\s")

End Sub
 

Bijlagen

Hoi Frans,

Je gebruikt een Engelse formule en je krijgt een Nederlandstalige foutmelding.
Ik vermoed dat je een Nederlandstalige Excel-versie hebt.
Je moet dan de Engelse formule naar het Nederlands vertalen. Ook moeten de komma's worden vervangen door puntkomma's.
Dat kan heel makkelijk op deze website: Translator • Excel-Translator

Verder heb ik ook vertrouwen in de oplossing FindSum.xlsm met de macro die ik heb aangereikt.

Deze translator werkt prima, waarvoor dank Hans!
 
Ik heb uitgezocht welke mogelijkheden in de buurt komen van 879,16.
879,67 is het dichtste bij.
Zie hieronder en in attachment op tabblad BRUTE FORCE

Bekijk bijlage 365558

(Voor een leesbare afbeelding even op klikken!)

NB: De bijlage BRUTO FORCE is nu geschikt voor het uitrekenen van alle mogelijke combinaties uit een rij van 13 getallen, maar zou nog eenvoudig kunnen worden uitgebreid.

Super van je. Hier kan ik wat mee. Nogmaals dank voor het meedenken en jouw bijdrage.
 
de macro-versie van Brute Force
Code:
Sub BruteForce()
     Dim bit(), res
     t = Timer     'start chrono
     Set c = Sheets("Som met macro").Range("A2:A14")     'je cijfertjes
     a = Application.Transpose(c.Value)     'inlezen in array
     doel = Range("D2").Value     'je doelwaarde
     mymin = 1000000000#     'huidige afwijking (extreem hoog)
     ReDim bit(1 To UBound(a))     'dimensioneer hulparray

     Do     'start loop
          ptr = ptr + 1     'aantal keer dat loop werd gemaakt
          bit(1) = bit(1) + 1     '1e element 1 ophogen
          For i = 1 To UBound(bit) - 1     'alle elementen aflopen
               If bit(i) >= 2 Then     'zolang er een element op 2 (of meer staat, kan normaal niet)
                    bit(i) = 0: bit(i + 1) = bit(i + 1) + 1     'die op 0 en de volgende +1
               Else
                    Exit For     'klaar met deze kleine loop
               End If
          Next

          Delta = Abs(doel - WorksheetFunction.SumProduct(a, bit))     'afwijking tov doel met deze combinatie
          If Delta <= mymin Then     'kleiner dan vorige afwijking
               res = bit     'bitjes overnemen
               mymin = Delta     'nieuwe kleinere afwijking tov vroeger
          End If

     Loop While bit(UBound(bit)) < 2 And mymin > 0.00001     'loopje tot alle combinaties afgelopen zijn of totdat de afwijking verschrikkelijk klein geworden is

     c.Offset(, 1).Value = Application.Transpose(res)     'oplossing ernaast zetten
     MsgBox "afwijking oplossing : " & Format(mymin, "0.0000") & vbLf & "aantal loops : " & ptr & vbLf & "gevonden in : " & Format(Timer - t, "0.00\s")

End Sub
Je bent een topper, dankjewel.
 
Voor een exacte match hier nog een functie

Code:
Dim sp As String
Function G_Combo(rng As Variant, xTot As Double, Optional cnt As Long = 1) As Variant
 Dim ar, xSum As Double, i As Long
 ar = rng
 sp = vbNullString
 For i = cnt To UBound(ar)
   xSum = Round(xTot, 2) - Round(ar(i, 1), 2)
   If xSum = 0 Then
     sp = sp & "|" & ar(i, 1)
     Exit For
   ElseIf xSum > 0 Then
     G_Combo ar, xSum, i + 1
     If Len(sp) Then
       sp = sp & "|" & ar(i, 1)
       Exit For
     End If
   End If
 Next
 G_Combo = Split(Mid(sp, 2), "|")
End Function

Code:
=G_Combo(A2:A14;D2)
 
@JEC, recursief, dat is zo mooi, maar ik slaag er niet in !
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan