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.
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 …
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:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28 • Foxo90
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 )
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.
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.
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:1 Nutzer sagt Danke an Ego für diesen Beitrag 28 • Foxo90
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.
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:1 Nutzer sagt Danke an Ego für diesen Beitrag 28 • Foxo90
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:1 Nutzer sagt Danke an Ego für diesen Beitrag 28 • Foxo90
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
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