Supportnet / Forum / Tabellenkalkulation
Alle möglichen Kombinationen automatisch in Zellen eintragen?
Frage
Hallo
Ich habe folgendes Problem: Mir liegen 7 verschieden EURO-Beträge vor. Jetzt soll ich alle möglichen Kombinationen aus diesen Beträgen in einzelne Zellen zeilenweise eintragen. Pro Zeile darf jeder Betrag nur einmal vorkommen, er darf aber auch fehlen. Das Ergebnis soll so aussehen (B=Betrag, Leerzeichen= "Neue Zelle").
B1
B2
B3
.
.
.
B1 B2
B1 B3
B1 B4
.
.
.
B1 B2 B3
B1 B2 B4
B1 B2 B5
.
.
.
B1 B2 B3 B4 B5 B6 B7
Nun meine Frage: Gibt es eine Möglichkeit diesen Vorgang zu automatisieren oder zu optimieren?
Toll wären auch fertige Vorlagen, bei denen der Bezug zwischen den Zellen und den Beträgen über Namenszuweisung erfolgt.
Ich bin für jeden hilfreichen Rat äußerst dankbar.
MfG
Reinhard
PS: Wie viele mögliche Kombinationen gibt es eigentlich für den oben geschilderten Fall?
Antwort 1 von Primut
Hey Reinhard,
klar geht das über Makros automatisch, was bei der großen Anzahl auch sinnvoll ist, von der Sache her mit Schleifen und entsprechenden Abfragen.
Gehe ich recht in der Annahme, wenn dich die Summe interessiert, daß damit die Vertauschungen entfallen? D.h. B2 B4 währe das gleiche wie B4 B2 und damit nur ein zu berücksichtigender Fall?
Die Anzahl läßt sich mit den entsprechenden Formeln der Kombinatorik berechnen, hab ich aber nicht zur Hand.
Kannst dich ja melden, wenn ich dir ein Beispiel-Makro fertig machen soll.
Gruß Primut
klar geht das über Makros automatisch, was bei der großen Anzahl auch sinnvoll ist, von der Sache her mit Schleifen und entsprechenden Abfragen.
Gehe ich recht in der Annahme, wenn dich die Summe interessiert, daß damit die Vertauschungen entfallen? D.h. B2 B4 währe das gleiche wie B4 B2 und damit nur ein zu berücksichtigender Fall?
Die Anzahl läßt sich mit den entsprechenden Formeln der Kombinatorik berechnen, hab ich aber nicht zur Hand.
Kannst dich ja melden, wenn ich dir ein Beispiel-Makro fertig machen soll.
Gruß Primut
Antwort 2 von n-reinhard
Hallo Primut,
danke für Deine vielversprechende Antwort. Ich hatte die Hoffnung schon beinahe aufgegeben.
Es wäre toll, wenn Du mir mittels eines Beispielmakros auf die Sprünge helfen könntest.
Was die Vertauschungen betriftt hast Du natürlich recht:
B2 B4 = B4 B2.
Also, wenn Du mir helfen könntest wäre ich Dir sehr dankbar.
MfG
Reinhard
danke für Deine vielversprechende Antwort. Ich hatte die Hoffnung schon beinahe aufgegeben.
Es wäre toll, wenn Du mir mittels eines Beispielmakros auf die Sprünge helfen könntest.
Was die Vertauschungen betriftt hast Du natürlich recht:
B2 B4 = B4 B2.
Also, wenn Du mir helfen könntest wäre ich Dir sehr dankbar.
MfG
Reinhard
Antwort 3 von Primut
Hi Reinhard,
Ok, werd mich ransetzten,
weiß aber noch nicht, wie schnell ich bin.
Bis dahin
Gruß
Primut
Ok, werd mich ransetzten,
weiß aber noch nicht, wie schnell ich bin.
Bis dahin
Gruß
Primut
Antwort 4 von Primut
Hallo Reinhard,
Hier mein Beispiel-Makro Vorschlag:
Ich gehe davon aus, dass du weiß, wie man es einbaut etc. ansonsten noch mal fragen.
Auf deine Frage, wie viel Möglichkeiten es gibt: Stell dir einfach eine 7 Bit Binärzahl vor, dort kommt jede 0 / 1 Kombination nur einmal vor, d.h. du ordnest jedes Bit einem deiner Beträge zu und hast mit der jeweiligen Multiplikation das Ergebnis (Null-Werte entfallen also!).
Damit ergeben sich genau 2^7 Möglichkeiten, das sind genau 128 Möglichkeiten, die Möglichkeit dass alle Werte Null sind mitgerechnet.
Selbiges mache ich in dem Beispielmakro: Deine 7 Werte / Beträge stehen in Zelle B1 bis H1.
Die Nullwerte habe ich weggelassen, du kannst die Reihenfolge anschließend beliebig verändern. Voraussetzung ist allerdings, dass deine Beispielwerte Zahlen (meinetwegen auch als Währung formatiert) sind, ansonsten musst du die Nullselektion wg. Typenkonflikt anders gestalten.
Sehr zu meinem Leidwesen hat es Excel2000 VBA nicht zugelassen, einzelne Array-Variablen als Schleifenlaufvariable zu verwenden, deswegen die umständliche Select Case Anweisung.
Viel Spaß
Primut
PS: Schade, daß bisher im SN noch nicht Leerzeichen dargestellt werden, macht den Code nicht gerade übersichtlicher...
Hier mein Beispiel-Makro Vorschlag:
Ich gehe davon aus, dass du weiß, wie man es einbaut etc. ansonsten noch mal fragen.
Auf deine Frage, wie viel Möglichkeiten es gibt: Stell dir einfach eine 7 Bit Binärzahl vor, dort kommt jede 0 / 1 Kombination nur einmal vor, d.h. du ordnest jedes Bit einem deiner Beträge zu und hast mit der jeweiligen Multiplikation das Ergebnis (Null-Werte entfallen also!).
Damit ergeben sich genau 2^7 Möglichkeiten, das sind genau 128 Möglichkeiten, die Möglichkeit dass alle Werte Null sind mitgerechnet.
Selbiges mache ich in dem Beispielmakro: Deine 7 Werte / Beträge stehen in Zelle B1 bis H1.
Die Nullwerte habe ich weggelassen, du kannst die Reihenfolge anschließend beliebig verändern. Voraussetzung ist allerdings, dass deine Beispielwerte Zahlen (meinetwegen auch als Währung formatiert) sind, ansonsten musst du die Nullselektion wg. Typenkonflikt anders gestalten.
Sehr zu meinem Leidwesen hat es Excel2000 VBA nicht zugelassen, einzelne Array-Variablen als Schleifenlaufvariable zu verwenden, deswegen die umständliche Select Case Anweisung.
Sub ZahlenVariation()
Dim z1%, z2%, z3%, z45, z5%, z65, z7%, y%
Dim Nr%, Anz%
Dim v(7) As Double, Betrag(7) As Double
Betrag(1) = [B1].Value
Betrag(2) = [C1].Value
Betrag(3) = [D1].Value
Betrag(4) = [E1].Value
Betrag(5) = [F1].Value
Betrag(6) = [G1].Value
Betrag(7) = [H1].Value
Nr = 0
[A1].Value = "Nr"
For z1 = 0 To 1
For z2 = 0 To 1
For z3 = 0 To 1
For z4 = 0 To 1
For z5 = 0 To 1
For z6 = 0 To 1
For z7 = 0 To 1
Nr = Nr + 1
Anz = 0
For y = 1 To 7
Select Case y
Case 1
v(y) = z1 * Betrag(y)
Case 2
v(y) = z2 * Betrag(y)
Case 3
v(y) = z3 * Betrag(y)
Case 4
v(y) = z4 * Betrag(y)
Case 5
v(y) = z5 * Betrag(y)
Case 6
v(y) = z6 * Betrag(y)
Case 7
v(y) = z7 * Betrag(y)
End Select
If v(y) > 0 Then
Cells(Nr + 1, Anz + 2).Value = Betrag(y)
Anz = Anz + 1
Else
End If
Next y
Cells(Nr + 1, 1).Value = Nr
Next z7
Next z6
Next z5
Next z4
Next z3
Next z2
Next z1
End Sub
Viel Spaß
Primut
PS: Schade, daß bisher im SN noch nicht Leerzeichen dargestellt werden, macht den Code nicht gerade übersichtlicher...
Antwort 5 von n-reinhard
Hallo Primut,
es funktioniert perfekt. Ich möchte mich hiermit nochmals recht herzlich bei Dir bedanken - Du warst mir eine sehr große Hilfe.
MfG
Reinhard
es funktioniert perfekt. Ich möchte mich hiermit nochmals recht herzlich bei Dir bedanken - Du warst mir eine sehr große Hilfe.
MfG
Reinhard

