Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Wert X aller möglichen Zahlenkombinationen addieren?
#1
Liebe Community


Gibt es eine Formel, die folgendes kann: Aus einer Zahlenliste ausgeben, welche Werte addiert eine gewünschte Zahl ergeben? Ich möchte zum Beispiel wissen, welche Beträge zusammen 40 ergeben:

30
12
20
8
17
32
10

Im Beispiel wären dies also 30+10 und 8+32. Gibt es irgendwie so eine Formel, die aus einer Spalte den Wert X aller möglichen Zahlenkombinationen ermittelt? Das wäre super und würde mir mega helfen.

Danke & Gruss
Foxo
Antworten Top
#2
Moin!
Es wäre aber auch 20+12+8
Wie viel Summanden sind denkbar?
Wenn Du Dich etwas mit Kombinatorik auskennst, wirst Du sehen, dass Du schnell bei Dagobert'schen Fantastilliarden Möglichkeiten bist.
Bevor der Quantencomputer erfunden ist, hilft Brain 2.0 eher … Wink

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Foxo90
Antworten Top
#3
Salute Ralf!

Höhö, erwischt. 20+12+8 würde natürlich auch gehen, hab ich gar nicht gesehen... Oh Mann, so viel zum Thema Brain 2.0. :19:
Konkret geht es halt darum, dass auf der Arbeit viele Kundenzahlungen von Hand verbuchen muss, da die ausländische Bank die Daten nicht in brauchbarer Form für unser WaWi-System liefert (sonst würde alles automatisch gebucht). Manchmal kommt es halt vor, dass ich eine Zahlung übersehe oder sonst irgendwie falsch buche. Wenn ich dann den Saldo vom Bankkonto mit dem Saldo vom Konto in der WaWi vergleiche, dann fehlt halt ein Betrag X. Wenn ich nur eine Zahlung übersehen habe, dann ist es relativ einfach den vergessenen Betrag zu finden und die Zahlung nachträglich auszubuchen. Wenn ich aber zwei Zahlungen übersehen habe, dann beginnt das grosse Rätselraten welche zwei Beträge ich wohl übersehen habe... Und da ich die Daten von der Bank als CSV runterladen kann, dachte ich mir, dass ich dann einfach den fehlenden Betrag in allen Tageseingängen suchen lassen kann. Gäbe es solch eine Möglichkeit? Da es sich um Bankzahlungen handelt, mit zum Teil "Krüppelbeträgen" nach der Kommastelle, kämen eventuell auch nicht so viele Varianten in Frage. Aber es ist halt echt mühsam, dutzende oder gar hunderte Zahlungen von Hand abzugleichen. Und da ich faul bin, kam ich auf die vermeintlich geniale Idee. Oder fällt dir spontan noch was anderes ein (ausser genauer zu arbeiten Blush )

Danke & Gruss
Martin
Antworten Top
#4
Hallo Ralf,

Zitat:Bevor der Quantencomputer erfunden ist

ich habe heute Morgen in den Nachrichten gehört, daß es den schon gibt.
Es wird allerdings noch ein Weilchen dauern, bis ich mir so etwas unter den
Schreibtisch stellen kann. Das wird wohl mein Konto beträchtlich überfordern.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#5
Ach und wegen den Summanden, das sind so irgendwie von 50 bis 150 (je nach Saison bzw. Zahlungsaufkommen). Aber eben, es hat auch solche mit Zahlen hinter dem Komma, das würde das ganze etwas eingrenzen.
Antworten Top
#6
Hallo Foxo,

1. Bei bis zu 150 Summanden halte ich eine Formellösung für zu aufwendig. Ist eine programmierte Lösung für dich akzeptabel?

wenn ja weiter

2. Man könnte hierbei schon verbuchte Zahlungen nicht berücksichtigen. Wie wäre es mit einer Beispieldatei und der Vorgabe welche Zahlungen noch zu berücksichtigen sind und wie die passenden Kombinationen ausgewiesen werden sollen?

3. Gibt es eine maximale Anzahl der möglichen Teilbeträge?

4. Da auch Nachkommazahlen berücksichtigt werden sollen, kann eine genaue Übereinstimmung in einem Rechner nicht immer gefunden werden. Wie weit soll eine ausgewiesene Kombination maximal vom gesuchten Wert abweichen?
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Foxo90
Antworten Top
#7
Hallo Foxo,

in der Anlage eine Beispieldatei in der Aus einer Liste von (zur Zeit) 150 Einträgen alle Kombinationen ausgegeben werden, die mit (zur Zeit) maximal 4 Elementen dem Suchwert (zur Zeit) bis auf dem Cent entsprechen.


Angehängte Dateien
.xlsm   Kombinationssumme.xlsm (Größe: 568,63 KB / Downloads: 10)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Foxo90
Antworten Top
#8
Wenn man erst sortiert, kann man doppelte Ergebnisse rausfiltern:


Code:
Sub M_snb()
   Cells(1).CurrentRegion.SpecialCells(2, 1).Sort Cells(2, 1)
   sn = Cells(1).CurrentRegion.SpecialCells(2, 1)
   y = Cells(2, 4)
   
   With CreateObject("scripting.dictionary")
        For j = 1 To UBound(sn)
           For jj = j + 1 To UBound(sn)
              If sn(j, 1) + sn(jj, 1) = y Then .Item(sn(j, 1) & " + " & sn(jj, 1)) = ""
              For jjj = j + 2 To UBound(sn)
                   If sn(j, 1) + sn(jj, 1) + sn(jjj, 1) = y Then .Item(sn(j, 1) & " + " & sn(jj, 1) & " + " & sn(jjj, 1)) = ""
                   For jjjj = j + 3 To UBound(sn)
                       If sn(j, 1) + sn(jj, 1) + sn(jjj, 1) + sn(jjjj, 1) = y Then .Item(sn(j, 1) & " + " & sn(jj, 1) & " + " & sn(jjj, 1) & " + " & sn(jjjj, 1)) = ""
                 Next
              Next
           Next
        Next
        
        Cells(1, 12).Resize(.Count) = Application.Transpose(.keys)
   End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Foxo90
Antworten Top
#9
Hallo snb,

sollte es nicht "For jjj = jj+1" statt "For jjj = j + 2" sein?
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Foxo90
Antworten Top
#10
Hi Ego
 
Ich hatte hier eine ähnliche Struktur wie @snb verwendet. Durch die If-Abfragen ist der Code dann wesentlich flinker und bei absteigend sortierten Werten am schnellsten.
 
Nachteil gegenüber deinem Code ist das die Ebene nicht flexibel wahlbar ist.
Code:
Private Sub CommandButton3_Click()
Dim LetThema As Long
Dim Werte, t As Variant
Dim arrAusgabe As Variant
Dim S1, S2, S3, S4 As Long
Dim strKombi As String
Dim Betrag As Single

On Error GoTo Fehler
t = Timer

Werte = Application.Transpose(Range("A2", Range("A2").End(xlDown)))
LetThema = UBound(Werte, 1)
Betrag = Range("L1").Value

For S1 = 1 To LetThema
  If Werte(S1) < Betrag Then
     For S2 = S1 + 1 To LetThema
       If Werte(S1) + Werte(S2) < Betrag Then
          For S3 = S2 + 1 To LetThema
            If Werte(S1) + Werte(S2) + Werte(S3) < Betrag Then
               For S4 = S3 + 1 To LetThema
                 If Werte(S1) + Werte(S2) + Werte(S3) + Werte(S4) = Betrag Then
                   strKombi = strKombi & "$" & Werte(S1) & "+" & Werte(S2) & "+" & Werte(S3) & "+" & Werte(S4)
                   Exit For
                 End If
               Next S4
            Else
               If Werte(S1) + Werte(S2) + Werte(S3) = Betrag Then strKombi = strKombi & "$" & Werte(S1) & "+" & Werte(S2) & "+" & Werte(S3)
            End If
          Next S3
       Else
          If Werte(S1) + Werte(S2) = Betrag Then strKombi = strKombi & "$" & Werte(S1) & "+" & Werte(S2)
       End If
     Next S2
  Else
     If Werte(S1) = Betrag Then strKombi = strKombi & "$" & Werte(S1)
  End If
Next S1

Range("C2", Range("C2").End(xlDown)).ClearContents
arrAusgabe = Split(Mid(strKombi, 2), "$")
Range("C2").Resize(UBound(arrAusgabe, 1) + 1).Value = Application.Transpose(arrAusgabe)
MsgBox Timer - t
Exit Sub

Fehler:
MsgBox "Keine Möglichkeit gefunden."
End Sub

Gruß Elex
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste