Supportnet Computer
Planet of Tech

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

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

Antwort 3 von Primut

Hi Reinhard,

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.


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