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

Bestmögliche Kombination bilden

Forumthread: Bestmögliche Kombination bilden

Bestmögliche Kombination bilden
07.10.2016 10:03:48
Olli
Moin zusammen,
ich bin mir nicht sicher, ob das nicht etwas zu viel von Excel verlangt ist, aber ich schildere mal mein Anliegen:
Ich habe eine Tabelle aus z.B. 20 verschiedenen Werten
5 - 13 - 1 - 3,5 - etc....
Kann Excel die bestmögliche Kombination aus diesen Werten bilden, um z.b. an die Zahl 50 heranzukommen und mir diese Kombination auswerfen?
Ich hoffe, ich konnte mich verständlich ausdrücken.
Danke für die Hilfe und Gruß
Olli
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestmögliche Kombination bilden
07.10.2016 13:03:53
Michael
Moin, moin,
lad bitte ne Beispieldatei hoch, wie das aussieht: wo stehen die Zahlen? Wo steht die "50"? Wie soll das Ergebnis dargestellt werden?
Ansonsten fehlt Deiner Angabe die Info, was denn "bestmöglich" in diesem Zusammenhang heißen soll.
Schöne Grüße,
Michael
AW: Bestmögliche Kombination bilden
07.10.2016 13:33:53
Olli
Moin Michael,
die Datei, in der das ganze mit rein soll, kann ich hier nicht zur Verfügung stellen, von daher hier ein einfaches Beispiel.
In Spalte B sind die vorhandenen Daten.
Das Ziel ist die bestmögliche Kombination aus diesen Zahlen zu finden, um die 50 (Zelle G1) zu erreichen. Bestmöglich heißt, so nahe wie möglich an die 50 heran, ohne sie zu überschreiten.
Im Idealfall aus all den vorhandenen Zahlen aus Spalte B eine Kombinationsmöglichkeit finden, die genau 50 ergibt. Die zur Kombination "genutzten" Zahlen sollen dann in Spalte D ausgeworfen werden.
https://www.herber.de/bbs/user/108646.xlsx
Gruß
Olli
Anzeige
AW: Bestmögliche Kombination bilden
07.10.2016 13:43:30
Bernd
Servus,
kann die Tabelle vom größten zum kleinsten Wert sortiert werden, oder darf die Reihenfolge nicht verändert werden?
Grüße, Bernd
AW: Bestmögliche Kombination bilden
07.10.2016 13:44:33
Bernd
...und können Werte doppelt vorkommen?
AW: Bestmögliche Kombination bilden
07.10.2016 13:46:28
Olli
Hallo Bernd,
Sortiert werden darf die Tabelle und Werte können auch doppelt vorkommen.
Am Ende ist es wichtig, dass die zur Kombination herangezogenen Werte anhand des Namens Spalte A ausgegeben werden.
Die Reihenfolge spielt dabei keine Rolle.
Gruß
Olli
Anzeige
AW: Bestmögliche Kombination bilden
07.10.2016 14:13:45
Bernd
Servus Olli,
versuch mal folgenden Makrocode für deine Beispieldatei:

Option Explicit
Dim i As Integer
Dim Summe
Dim Kombi As String
Dim lz As Integer
Sub Summe50()
lz = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Range("A2:B14").Select
Range("B2").Activate
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key:=Range("B2"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle1").Sort
.SetRange Range("A2:B14")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Summe = 0
Kombi = ""
For i = 2 To lz - 1
If i = 2 And Cells(i, 2).Value 
Grüße, Bernd
Anzeige
AW: Bestmögliche Kombination bilden
07.10.2016 15:11:24
Olli
Ich habe jetzt schon Feierabend gemacht.
Schaue es mir Montag an und gebe Rückmeldung!
Danke schon mal für die Mühe
AW: Bestmögliche Kombination bilden
07.10.2016 16:24:52
Michael
Hi,
jetzt bastel ich schon die ganze Zeit, dabei hat Bernd auch schon was gemacht.
Macht nix. Hier meine Variante, die auf einem Code von Daniel zur Kombinatorik fußt (link im Skript):
Sub Kombinatorik()
Dim x&, i&, z&   ' & = as long
Dim a, b         ' als Variant bzw. Array
Dim s#, bestS#   ' as double
Dim AnzahlVariablen&, AnzahlKombinationen&
Dim ziel#, zDelta#
Dim schonDa As Boolean
a = Range("B2:B14") ' hier ggf. dynamisch
b = a
AnzahlVariablen = UBound(a)
AnzahlKombinationen = 2 ^ AnzahlVariablen
ziel = Range("G1")
zDelta = ziel * 0.95   ' ab 5% unter Ziel
Range("L2").CurrentRegion.ClearContents
Range("L2").Resize(AnzahlVariablen) = a
z = 1
For i = 0 To AnzahlKombinationen - 1
s = 0
For x = 0 To AnzahlVariablen - 1
b(x + 1, 1) = (-((i And (2 ^ x)) > 0)) * a(x + 1, 1)
s = s + b(x + 1, 1)
' Falls das "erstbeste" passende Ergebnis gewünscht ***
'        If s  zDelta And s > bestS Then
'          Range("L2").Offset(, z).Resize(AnzahlVariablen) = b
'          If s = ziel Then
'            Range("D2").Resize(AnzahlVariablen) = b
'            Exit Sub
'          End If
'          bestS = s
'          Range("L1").Offset(, z).Value = s
'          z = z + 1
'        End If
' Falls eines aus mehreren passendes Ergebnis gewünscht ***
If (s  zDelta And s > bestS) Or _
s = ziel Then
Range("L2").Offset(, z).Resize(AnzahlVariablen) = b
Range("L1").Offset(, z).Value = s
If s = ziel And (Not schonDa) Then
Range("D2").Resize(AnzahlVariablen) = b
schonDa = True
End If
bestS = s
z = z + 1
End If
Next
'    If i Mod 1000 = 0 Then Stop ' bei sehr großer Anzahl evtl.
'    mit ProgressBar garnieren oder so...
Next
' optischer Schnickschnack ...
With Range("L2").CurrentRegion
.HorizontalAlignment = xlCenter
.Rows(1).Interior.ColorIndex = 15
.Rows(1).Font.Bold = True
.Columns(1).Interior.ColorIndex = 15
.Columns(1).Font.Bold = True
End With
End Sub
Datei: https://www.herber.de/bbs/user/108653.xlsm
Das Makro gibt je nach dem, welchen Codeteil Du auskommentierst, "nur" den erstbesten Treffer aus oder (das ist der jetzt NICHT auskommentierte Teil) sowohl den erstbesten als auch alle weiteren, rechts, ab Spalte L (das ist eine Wiederholung der Werte aus Spalte B) bzw. Spalte M.
Viel Spaß,
Michael
Anzeige
AW: Bestmögliche Kombination bilden
11.10.2016 21:05:53
Olli
Hallo zusammen,
Vielen Dank! Da kann ich super mit arbeiten.
Ich werde jetzt versuchen, das Ganze in meine Datei einzubauen, aber da sehe ich keine Probleme.
Ansonsten melde ich mich nochmal ;)
Vielen Dank!
AW: Bestmögliche Kombination bilden
12.10.2016 08:40:36
Bernd
Servus,
wobei der Algorithmus von Michael bzw. Daniel wahrscheinlich eher deiner Vorstellung entsprechen sollte. Mein Makro sortiert nur der Größe nach und addiert solange die Summe kleiner oder gleich 50 bleibt. "Optimal" ist das nicht...
Grüße, Bernd
Anzeige
Warum dann offen? owT
13.10.2016 06:53:24
Bernd
;
Anzeige
Anzeige

Infobox / Tutorial

Bestmögliche Kombination in Excel erstellen


Schritt-für-Schritt-Anleitung

Um die bestmögliche Kombination von Werten in Excel zu finden, kannst du folgende Schritte ausführen:

  1. Daten vorbereiten: Erstelle eine Tabelle mit den Werten in Spalte B. Setze das Ziel (z.B. 50) in Zelle G1.
  2. Makro erstellen: Öffne den VBA-Editor (ALT + F11) und füge ein neues Modul hinzu.
  3. Makro-Code einfügen: Nutze den folgenden VBA-Code, um die bestmögliche Kombination zu finden:
Sub Kombinatorik()
    Dim x&, i&, z&
    Dim a, b
    Dim s#, bestS#
    Dim AnzahlVariablen&, AnzahlKombinationen&
    Dim ziel#, zDelta#
    Dim schonDa As Boolean
    a = Range("B2:B14") ' Werte anpassen
    b = a
    AnzahlVariablen = UBound(a)
    AnzahlKombinationen = 2 ^ AnzahlVariablen
    ziel = Range("G1")
    zDelta = ziel * 0.95   ' 5% unter Ziel
    Range("L2").CurrentRegion.ClearContents
    z = 1
    For i = 0 To AnzahlKombinationen - 1
        s = 0
        For x = 0 To AnzahlVariablen - 1
            b(x + 1, 1) = (-((i And (2 ^ x)) > 0)) * a(x + 1, 1)
            s = s + b(x + 1, 1)
        Next
        If (s > zDelta And s <= ziel) Or s = ziel Then
            Range("L2").Offset(, z).Resize(AnzahlVariablen) = b
            Range("L1").Offset(, z).Value = s
            If s = ziel And (Not schonDa) Then
                Range("D2").Resize(AnzahlVariablen) = b
                schonDa = True
            End If
            bestS = s
            z = z + 1
        End If
    Next
End Sub
  1. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, um die besten Kombinationen zu finden.

Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert": Stelle sicher, dass alle Variablen korrekt deklariert sind.
  • Fehler: Keine Ergebnisse: Überprüfe, ob die Werte in der richtigen Spalte (B) und das Ziel in G1 steht.
  • Fehler: Makro kann nicht ausgeführt werden: Aktiviere die Makros in den Excel-Optionen.

Alternative Methoden

Falls du kein Makro nutzen möchtest, kannst du auch folgende Methoden ausprobieren:

  • Solver-Add-In: Excel bietet das Solver-Add-In, mit dem du Optimierungsprobleme lösen kannst. Du kannst es aktivieren und die Zielwerte und Einschränkungen definieren.
  • Power Query: Mit Power Query kannst du Daten transformieren und analysieren, um die bestmöglichen Kombinationen zu finden.

Praktische Beispiele

Beispiel 1: Wenn du die Werte 5, 10, 15, 20 und 25 hast und 50 erreichen möchtest, wird der VBA-Code die Kombinationen wie (25, 20, 5) oder (15, 15, 20) ausgeben.

Beispiel 2: Mit dem Solver kannst du die gleiche Tabelle verwenden und die Zielzelle auf 50 setzen, um die Kombinationen zu optimieren.


Tipps für Profis

  • Daten dynamisch gestalten: Verwende dynamische Bereiche in deinem Makro, um die Größe des Datenbereichs automatisch anzupassen.
  • Ergebnisse formatieren: Nutze bedingte Formatierungen, um die besten Kombinationen hervorzuheben.
  • Fehlerbehandlung einfügen: Implementiere eine Fehlerbehandlung im VBA-Code, um unerwartete Ergebnisse zu vermeiden.

FAQ: Häufige Fragen

1. Wie viele Werte kann ich in die Tabelle eingeben?
Du kannst eine beliebige Anzahl von Werten eingeben, solange dein Computer genügend Ressourcen hat.

2. Funktioniert das in allen Excel-Versionen?
Der VBA-Code sollte in Excel 2010 und späteren Versionen funktionieren. Achte darauf, dass Makros aktiviert sind.

3. Was ist, wenn die Summe nie 50 erreicht?
Der Code gibt die nächstgelegene Kombination aus, die unter 50 bleibt, falls kein exakter Treffer möglich ist.

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