Wie kann man in Excel alle Kombinationsmöglichkeiten darstellen?
Ich habe ein Wort (z.b. Affe) und möchte nun alle Kombinationsmöglichkeiten aufgelistet bekommen, wenn man die Wahl hat, zwischen 2 Buchstaben jeweils entweder einen Punkt zu setzen oder keinen Punkt zu setzten.
Sodass die Auflistung dann wie folgt aussehen soll:
A.ffe
A.f.fe
A.f.f.e
Af.fe
...
Gibt es dafür eine Funktion oder einen Befehl in Excel?
Da es sich bei mir um ein Wort mit 35 Zeichen handelt, kann man das nicht händisch machen. Vielen Dank für die Hilfe
7 Antworten
Ich würde es rekursiv in VBA lösen.
Aber Vorsicht, bei Rekursionen stößt manch eine App an die Grenze ihrer Kapazitäten, was die Schachtelung von Funktionsaufrufen betrifft.
In dieser Funktion wird abwechselnd zwischen zwei Buchstaben ein Punkt gesetzt.
Übergeben wird zum Beispiel "Apfel". Dann werden die Punkte wie folgt dazwischen geschaltet:
A.pfel
A.p.fel
A.p.f.el
A.p.f.e.l
A.p.fe.l
A.pf.el
A.pf.e.l
A.pfe.l
Ap...
...
Für bis zu 6 Buchstaben ohne VBA:
Irgendeine Zelle (Bsp. O1) definierst du als "Eingabe".
Irgendeine Zelle (Bsp. P1) definierst du als "AnzPkt" mit der Formel =LÄNGE(Eingabe)-1
A1:=WENN(B1<>"";WECHSELN(WECHSELN(TEIL(Eingabe;1;1)&B1&TEIL(Eingabe;2;1)&C1&TEIL(Eingabe;3;1)&D1&TEIL(Eingabe;4;1)&E1&TEIL(Eingabe;5;1)&F1&TEIL(Eingabe;6;1);"0";"");"1";".");"")
Herunterziehen bis A32.
B1: =WENN(ODER(SPALTE(A1)>AnzPkt;ZEILE(A1)>2^AnzPkt);"";(REST(ZEILE(A1)-1;2^(AnzPkt-SPALTE(A1)+1))<=2^AnzPkt/2^(SPALTE(A2))-1)+0)
Kopieren auf B1:F32. Das ist eine Hilfsmatrix, die die Permutationen darstellt.
Mit 34 wahlweise gesetzten oder nicht gesetzten Punkten macht das 2^34 mögliche "Wörter" mit einer mittleren Länge von ca. 50 Zeichen.
Dass das für Excel deutlich zu viel ist, wurde schon gesagt. Als Textdatei ist es 1 TB groß. Was machst Du dann damit? Es gibt Editoren, mit denen Du so eine Datei lesen kannst, aber die Lektüre ist langweilig und zeitraubend, ein Wort pro Sekunde gelesen, und schon nach 544 Jahren bist Du fertig ;-)
Vermutlich gibt es aber für Dein Problem eine bessere Lösung als das Erzeugen einer so langen Liste.
Bei 35 Zeichen gibt es 34 Zwischenräume. In jedem Zwischenraum gibt es zwei Möglichkeiten. Damit gibt es insgesamt 2 hoch 34 = 17 Milliarden Kombinationen, genau 17.179.869.184. Bei angenommen 50 Zeilen je Seite braucht man dafür 343.597.383 Seiten. Auf Papier wäre das ein Turm von ca. 34 Kilometer Höhe. Toll! Was macht man damit?
Gibt es dafür eine Funktion oder einen Befehl in Excel?
Ist mir nicht bekannt, läßt sich aber simpel programmieren.
Da es sich bei mir um ein Wort mit 35 Zeichen handelt, kann man das nicht händisch machen.
Was? Die reichlich 17 Milliarden Varianten kannst du händisch nicht erstellen? Auswerten kannst du sie aber?
Das Wort in Buchstaben splitten, jeweils ein Leerzeichen dazwischen, als Array speichern (oder das bearbeitete Wort als array behandeln.
Eine Schleife von 0 bis 2 exp (len(Wort) - 1) laufen lassen, im Array die binären Repräsentationen der 1 des Schleifenzählers mit Punkten ersetzen. Verbliebene Leerzeichen raushauen, Ergebnis speichern. Next.
Eine rekursive Funktion könnte das Problem recht gut lösen. Excel ist dafür allerdings nich besonders gut geeignet. In Java (bzw. jeder beliebigen Programmiersprache) geht es super.
Ich grüble gerade daran aber das Mid(... und verschachtelte For Schleifen bereitet mir soviel Kopfschmerzen dass ich die Frage am liebsten ignorieren täte, zumal es nur auf mehrere Tabellenblätter passt und ich vermute, dass Excel heillos abstürzt.