Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Welche Kombinationen ergeben Summe

Welche Kombinationen ergeben Summe
09.12.2008 17:16:00
tor
Hallo zusammen,
ich bin neu hier und hab gleich eine kniffelige Frage.
Ich habe eine Tabelle mit sagen wir mal 6 Zahlen.
3
6
7
12
16
25
Wie kann ich nun per Formel oder VBA herausfinden, welche Kombinationen eine bestimmte Summe
ergeben?
Also als Beispiel mal Summe = 28
16+12
3+6+7+12
3+25
usw.
Hat da jemand eine Idee?
Gruß
tor
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Welche Kombinationen ergeben Summe
09.12.2008 19:03:45
Erich
Hallo (hier stünde dein Vorname, ( dazu schau bitte mal in die Forums-FAQ )
meinst du so etwas?
 ABCD
1KandidatenSummeTrefferSummanden
232800000111125 + 1 + 1 + 1
36 00011000012 + 16
47 0111001116 + 7 + 12 + 1 + 1 + 1
512 1000010003 + 25
616 1010100113 + 7 + 16 + 1 + 1
725 1010101013 + 7 + 16 + 1 + 1
81 1010101103 + 7 + 16 + 1 + 1
91 1100101113 + 6 + 16 + 1 + 1 + 1
101 1111000003 + 6 + 7 + 12
11    
12    
13    

Dier Ergebnisse wurden damit ermittelt:

Option Explicit
Sub Summanden_ermitteln()
Dim kk As Integer, zz As Long, erg As String, ergT As String
Dim Atst As Double, Amax As Double
Dim anzZ As Integer, ii As Long, umsch As Boolean, arrB() As Boolean
anzZ = Cells(Rows.Count, 1).End(xlUp).Row - 1
ReDim arrB(1 To anzZ)                     ' Datenfeld "An/Aus" pro Zeile in Spalte A
zz = 1
Columns("C:D").ClearContents
[C1:D1] = Split("Treffer Summanden")
For ii = 1 To 2 ^ anzZ - 1          ' Schleife über Anzahl Kombinationen
Atst = 0                           ' )
erg = ""                           ' )
umsch = True                       ' Schalter für An/Aus-Wechsel
For kk = anzZ To 1 Step -1         ' Schleife über Elemente des Datenfelds "An/Aus"
If umsch Then                     ' bis ein Element "Aus" war (Schalter auf False ist)
arrB(kk) = Not arrB(kk)        ' "An/Aus" umschalten
If arrB(kk) Then umsch = False ' wenn "An"geschaltet, aufhören
End If
Atst = Atst - arrB(kk) * Cells(kk + 1, 1) ' addieren Spalte A, Zeilen mit "An"
If Atst > Cells(2, 2) Then Exit For       ' verlassen, wenn Zielwert F1 überschritten
erg = IIf(arrB(kk), "1", "0") & erg       ' Einsen ("An") und Nullen ("Aus") verketten
Next kk
' wenn  Summe = Amax Then
If Atst > Amax Then Amax = Atst              ' neue max. Summe
If Amax = Cells(2, 2) Then
zz = zz + 1
Cells(zz, 3) = erg
ergT = ""
For kk = 1 To anzZ
If arrB(kk) Then ergT = ergT & Cells(kk + 1, 1) & " + "
Next kk
Cells(zz, 4) = Left(ergT, Len(ergT) - 3)
End If
End If
Next ii
Cells(2, 2).Select
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Summanden-Kombinationen suchen
11.12.2008 15:06:19
tor
Hi,
sorry das ich mich erst jetzt melde, ich hatte das Problem etwas aus dem Auge verloren.
Danke! Das ist echt genial. Ich bin VBA technisch auch nicht ganz unbedarft, aber das kann ich nur begrenzt
nachvollsziehen.
Das ist genau das was ich gesucht habe.
DANKE
Thorsten
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Kombinationen in Excel finden, die eine bestimmte Summe ergeben


Schritt-für-Schritt-Anleitung

Um herauszufinden, welche Kombinationen von Zahlen in Excel eine bestimmte Summe ergeben, kannst du folgende Schritte befolgen:

  1. Zahlen eingeben: Erstelle eine Liste deiner Zahlen in einer Spalte (z.B. A1:A6).

    3
    6
    7
    12
    16
    25
  2. VBA-Editor öffnen: Drücke ALT + F11, um den Visual Basic for Applications (VBA)-Editor zu öffnen.

  3. Neues Modul erstellen: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  4. VBA-Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Option Explicit
    Sub Summanden_ermitteln()
       Dim kk As Integer, zz As Long, erg As String, ergT As String
       Dim Atst As Double, Amax As Double
       Dim anzZ As Integer, ii As Long, umsch As Boolean, arrB() As Boolean
       anzZ = Cells(Rows.Count, 1).End(xlUp).Row - 1
       ReDim arrB(1 To anzZ)
       zz = 1
       Columns("C:D").ClearContents
       [C1:D1] = Split("Treffer Summanden")
       For ii = 1 To 2 ^ anzZ - 1
           Atst = 0
           erg = ""
           umsch = True
           For kk = anzZ To 1 Step -1
               If umsch Then
                   arrB(kk) = Not arrB(kk)
                   If arrB(kk) Then umsch = False
               End If
               Atst = Atst - arrB(kk) * Cells(kk + 1, 1)
               If Atst > Cells(2, 2) Then Exit For
               erg = IIf(arrB(kk), "1", "0") & erg
           Next kk
           If Atst > Amax Then Amax = Atst
           If Amax = Cells(2, 2) Then
               zz = zz + 1
               Cells(zz, 3) = erg
               ergT = ""
               For kk = 1 To anzZ
                   If arrB(kk) Then ergT = ergT & Cells(kk + 1, 1) & " + "
               Next kk
               Cells(zz, 4) = Left(ergT, Len(ergT) - 3)
           End If
       Next ii
       Cells(2, 2).Select
    End Sub
  5. Zielsumme festlegen: Setze die Zielsumme in die Zelle (z.B. B2), die du erreichen möchtest (z.B. 28).

  6. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

  7. Ergebnisse prüfen: Die Kombinationen, die die vorgegebene Summe ergeben, werden in den Spalten C und D angezeigt.


Häufige Fehler und Lösungen

  • Fehler: "Typenübereinstimmung"

    • Lösung: Stelle sicher, dass alle Werte in der ersten Spalte als Zahlen formatiert sind.
  • Fehler: "Überlauf"

    • Lösung: Reduziere die Anzahl der Zahlen in deiner Liste, um die Komplexität zu verringern.
  • Fehler: Keine Ergebnisse angezeigt

    • Lösung: Überprüfe, ob die Zielsumme realistisch ist und ob die Werte in Spalte A korrekt eingegeben wurden.

Alternative Methoden

  1. Solver verwenden: Du kannst den Solver in Excel nutzen, um Kombinationen von Werten zu finden, die eine bestimmte Summe ergeben. Dies erfordert jedoch eine genaue Modellierung deines Problems.

  2. Formeln: Verwende komplexe Array-Formeln, um die Kombinationen zu ermitteln. Dies kann jedoch sehr unübersichtlich werden und ist nicht so benutzerfreundlich wie VBA.


Praktische Beispiele

Angenommen, du möchtest herausfinden, welche Zahlen aus deiner Liste die Summe 28 ergeben. Mit dem oben beschriebenen VBA-Skript erhältst du folgende Ergebnisse:

  • 16 + 12
  • 3 + 6 + 7 + 12
  • 3 + 25

Diese Kombinationen zeigen dir, welche Zahlen eine bestimmte Summe in Excel ergeben können.


Tipps für Profis

  • Optimiere den Code: Wenn du mit großen Datenmengen arbeitest, kannst du den VBA-Code optimieren, um die Ausführungsgeschwindigkeit zu erhöhen.

  • Fehlerbehandlung einfügen: Implementiere Fehlerbehandlungsroutinen im VBA-Code, um unerwartete Ergebnisse zu vermeiden.

  • Testen: Teste deine Makros regelmäßig mit verschiedenen Zielsummen, um sicherzustellen, dass sie korrekt arbeiten.


FAQ: Häufige Fragen

1. Wie kann ich die Zielsumme ändern? Du kannst die Zielsumme einfach in die Zelle eingeben, die du in der VBA-Prozedur angegeben hast (z.B. B2).

2. Funktioniert dieser Ansatz in allen Excel-Versionen? Ja, das VBA-Skript sollte in den meisten modernen Excel-Versionen (z.B. Excel 2010 und höher) funktionieren.

3. Gibt es eine Möglichkeit, diese Funktion ohne VBA zu nutzen? Ja, du kannst die Funktionalität auch mit komplexen Array-Formeln erreichen, aber das ist weniger effizient und erfordert mehr Aufwand.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige