Frage von oOinsaneOo, 55

Kombinationen ermitteln mit Excel?

Hi zusammen. Ich habe eine Aufgabe welche ich mit Excel erledigt haben möchte aber irgendwie hakt es gerade an einer Stelle. Ich habe eine Tabelle mit zehn Werten unterteilt in zwei Spalten also 5 Zahlenpaare (A1 - A2, B1 - B2, C1 - C2, D1 - D2, E1 - E2). Da möchte ich gerne alle Kombinationen ermitteln wenn man immer nur die 1 mit der 2 tauscht. Nicht a, b, c und miteinander. Ich habe jetzt schon ein Makro welches mir die Zahlen miteinander kombiniert aber halt auch a und b und c und d und e miteinander gemischt, d.h. ich muss nach jedem Durchmischen Aschenputtel spielen und "die Guten" heraus picken. Ich stehe da etwas auf dem Schlauch. Weiss jemand einen Rat?

Im Anhang ein Abbild des betreffenden Makros.

Antwort
von gfntom, 53

Wenn ich es richtig verstehe gibt es doch immer nur 2 Möglichkeiten, am Beispiel von A:
A1A2 oder A2A1 - oder meinst du das anders?

Falls ich dich das Problem richtig verstanden habe, geht dies ohne Makros nur mit Funktionen:
Du hast 5 bits, das erste bit ist für A, das zweite für B, ... das fünfte für E.

Ist das bit "0" bedeutet es: 1 kommt vor 2
Ist das bit "1" bedeutet es: 2 kommt vor 1

du hast also 5 bits als Zahl dargestellt ist dies ein Wert von 0-31.

In einer Spalte trägst du diese Werte ein, in den Spalten daneben wertest du die bits dieser Zahl aus und trägst das Ergebnis (die Reihenfolge) ein.

Kommentar von oOinsaneOo ,

Hi. Du hast es richtig erkannt. Ich habe habe deinen Gedankengang im Prinzip auch verstanden aber nicht wie ich das jetzt konkret umsetzen soll. Kannst du mir da vielleicht noch einmal behilflich sein? Mit den Funktionen kenne ich mich nicht so gut aus muss ich gestehen.

Kommentar von gfntom ,

Von F1-F32 stehen die Werte von 0-31;
A1,A2,B1,B2,C1,C2,D1,D2,E1,E2 stehen deine Werte

Formel in G1:
=WENN(REST($F1;2)=1;A$2&A$1;A$1&A$2)

Formel in H1:
=WENN(REST(GANZZAHL($F1/2);2)=1;B$2&B$1;B$1&B$2)

Formel in I1:
=WENN(REST(GANZZAHL($F1/4);2)=1;C$2&C$1;C$1&C$2)

Formel in J1:
=WENN(REST(GANZZAHL($F1/8);2)=1;D$2&D$1;D$1&D$2)

Formel in K1:
=WENN(REST(GANZZAHL($F1/16);2)=1;E$2&E$1;E$1&E$2)

Die Zellen von G1-K1 ziehst du jetzt nach unten bis K32 -fertig!



Kommentar von oOinsaneOo ,

Hi. 

Sorry dass ich mich jetzt erst melde, ich hatte gar keine Nachricht bekommen das du geantwortet hast. Das sieht alles soweit top aus wenn ich das richtig verstanden habe. 

Er spuckt mir ja hinten Zahlenpaare raus ohne Punkt und Komma. Gehe ich recht in der Annahme das der erste Wert immer links steht und der zweite rechts? A1 ist z.B. 1,72 und A2 ist 2, dann schreibt er mir in G1 1,722. Ich interpretiere das so das wie gesagt 1,72 links steht, also A1 bedeutet und 2 dann A2. Ist das korrekt soweit?

Zweite Frage: Kann ich das System erweitern auf zehn, elf oder 20 Zahlenpaare? Es klingt vielleicht etwas wahnsinnig aber ich benötige das tatsächlich in letzter Instanz so. :-)

Du musst das jetzt nicht schreiben ( wobei das natürlich Bombe wäre ), ein "Ja geht" oder "nein, geht nicht" würde reichte mir da schon. 

Danke, danke, danke bis hierher noch einmal. Du hast mir schon sehr geholfen. 

Kommentar von gfntom ,

Ja, das geht, im Prinzip relativ einfach sogar ;)
Das Problem ist nur: bei 20 bits hast du über 1 Million Möglichkeiten (2^20), soviele Zeilen mag Excel aber nicht.

Anleitung für die Erweiterung: markiere die Zellen von F1 bis K32 und ziehe das Markierte so weit nach rechts, dass du genug freie Zellen hast für deine 20 Paare. (als Alternative kannst du auch ganze Spalten links von F einfügen). Wichtig ist, dass die Zellenbezüge erhalten bleiben. Wenn du es so machst, wie ich es hier vorschlage, sollte es funktionieren.

Da ich schon mit einer Erweiterung gerechnet habe, habe ich die Funktionen so geschrieben, dass das einfach möglich ist :)
Du brauchst nur die 1. Zeile der letzten Spalte (im Moment ist das K1) nach rechts ziehen und dann die Formel anpassen. Alles was du noch tun musst, ist den Divisor anzupassen:
GANZZAHL($F1/16) wird zu GANZZAHL($F1/32)
und so weiter (also jede weitere Zelle rechts bekommt die nächsthöhere 2er-Potenz.)

Wenn du die erste Zeile für genügende Paare erweitert hast, ziehst du diese wieder nach unten -fertig!

Eine Anmerkung noch zu "ohne Punkt und Komma":
Das kannst du schnell selbst modifizieren:
der "&" operator macht eine reine Textverknüpfung genau wie du sagst.
statt ;E$2&E$1;E$1&E$2
kannst du also etwa ;E$2&" "&E$1;E$1&" "&E$2 schreiben
um ein Leerzeichen einzufügen (Statt dem Leerzeichen geht natürlich auch jeder andere String.)

Kommentar von oOinsaneOo ,

Das mit der Trennung verstehe ich leider überhaupt gar nicht bzw klappt das bei mir nicht. :-( 

Kommentar von gfntom ,

Angenomme In E1 steht der Wert 5 und in E2 steht der String abc.

Dann ergibt der Ausdruck E1&E2 den String 5abc.
Wenn ich dazwischen z.B. einen Bindestrich haben will, füge ich den als weiteren String direkt in den Ausdruck ein:
E1&"-"&E2 ergibt dann 5-abc.

Natürlich muss diese Erweiterung in allen Zellen gemacht werden, in denen dies so ausgegeben werden soll. (in deinem Fall: in der 1. Zeile ausbessern und nach unten ziehen.)

Kommentar von oOinsaneOo ,

Hi. Ich habe jetzt schon einmal selbst ein bisschen herum gebastelt. Ich habe einfach die Tabelle erweitert und die Buchstaben entsprechend angepasst. Ich hatte in den Formeln noch gesehen das da steht 1, 1/2, 1/4, 1/8, 1/16. Ich habe das jetzt einmal entsprechend fortgeführt mit 1/32, 1/64 ohne genau zu wissen was ich da tue. Ich hoffe aber das ich intuitiv richtig gehandelt habe. Ich habe auch die Tabelle auf 175 ( bei 7 Zahlenpaaren ) erweitert ( 5^2 *7 ). Korrekt? Danke.

Kommentar von gfntom ,

Ja, korrekt :)
"Was du da tust":
"REST"  bestimmt den Rest der bei einer Division bleibt
REST(F1;2) gibt daher den Rest bei Division durch 2, das entspricht dem ersten bit
Durch das "GANZZAHL (F1/2)" modifiziere ich das Argument so, dass das nächste bit ausgelesen wird.
Beispiel: F1 har den Wert 3 das ist binär 11. Der erste Rest ergibt das niedrigste bit. Jetz wird der Wert durch 2 dividiert : 3/2 =1,5 daraus eine Ganzzahl gemacht = 1 und wieder der Rest gebildet -> 2 bit.

Ich glaube, bei höheren Excel-Versionen gibt es schon elegantere Möglichkeiten, ich arbeite noch mit Excel 2002.

Antwort
von gfntom, 30

Eine Erweitrung noch zu meiner anderen Antwort:

Man sieht aus der Tabelle schön, wie sich die Struktur entwickelt.
Um diese Tabelle "händisch" um eine Spalte zu erweiteren brauche ich die Tabelle nur einmal unterhalb hinkopieren und die nächste Spalte daneben ausfüllen. Die obere Hälfte der neuen Spalte werden alle mit "Zuerst1 - Dann2" befüllt, die untere Hälfte mit "Zuerst2 - Dann1".

Dies muss so sein, da ja das Ganze nichts anderes ist, als die binäre Darstellung einer Zahl (mit der Ausnahme, dass so wie die Tabelle jetzt angeordnet ist, die bits "verkehrt" angeordnet sind.)

Keine passende Antwort gefunden?

Fragen Sie die Community