Zifferkombinationen aus Set-Kombinationen erstellen
#1
Liebe Forum User!

Ich habe bereits einen Code (CreateNumericalCombinations, Modul 3), der Zifferkombinationen erzeugt, aber es gibt ein Problem, denn er erzeugt nur 4 von 6. Und zwar: 
• 6, 21, 46
• 19, 21, 46
• 21, 42, 46
• 2, 6, 48
Leider sind 2, 19, 48 und 2, 42, 48 nicht dabei, und die Reinefolge stimmt auch nicht ganz. Ich wäre sehr dankbar, wenn jemand vielleicht bemerkt, warum das Makro nur 4 und nicht 6 produziert.

Hier folgt eine Beschreibung worum es überhaupt geht.

In meinem Excelarbeitsblatt mit dem Namen "Machine" habe ich die Bereiche P6:T19 und P27:T40, also Tabellen, die aus 14 Zeilen mit jeweils 5 Zellen in jeder Zeile bestehen. Diese Zellen können mit Zahlen gefüllt sein oder auch nicht. Leere Zellen werden ignoriert und dürfen auf keinen Fall als mit dem Wert 0 gefüllt angesehen werden.  In einigen dieser Zeilen befinden sich grüne Zahlen, die wichtig sind, auf die ich aber erst viel später zurückkomme (vielleicht in einem anderen Thema, da ich die Dinge im Moment einfacher halten möchte).

Bitte beachten, dass die Tabelle 1 im Arbeitsblatt den Bereich A6:T19 abdeckt, aber im VBA Code (Modul 3) bezieht sich die Tabelle 1 auf den Bereich P6:T19. Auf die gleiche Weise ist Tabelle 2 im Arbeitsblatt A27:E40, aber im VBA Code (Modul 3) ist es der Beriech P27:T40.

Ich möchte, dass Sie diese beiden Tabellen getrennt betrachten (die "erste Tabelle" oder "Tabelle 1" ist der Bereich P6:T19 und die "zweite Tabelle" oder "Tabelle 2" ist der Bereich P27:T40), aber ich möchte auch, dass Sie jede einzelne Zeile dieser Tabellen als eine Zahlenset betrachten. So hat sowohl die erste Tabelle (P6:T19) als auch die zweite Tabelle (P27:T40) 14 Zahlensets.
Das erste Zahlenset in Tabelle 1 ist die Zeile P6:T6, die zweite die Zeile P7:T7 usw. bis zum vierzehnten Zahlenset, das die Zeile P19:T19 ist.
Set 1 (Zeile P6:T6) sieht wie folgt aus: 6, 19, 32, 39, 42
(...)
Set 14 (Zeile P19:T19) sieht wie folgt aus: 36, leere Zelle, leere Zelle, leere Zelle, leere Zelle
Leere Zellen im Bereich P6:P19 werden ignoriert und dürfen unter keinen Umständen als mit dem Wert 0 versehen angesehen werden.

Das erste Zahlenset in Tabelle 2 ist die Zeile P27:T27, das zweite entsprechend dazu die Zeile P28:T28 und so weiter bis zum vierzehnten Zahlenset, das die Zeile P40:T40 ist.
Set 1 (Reihe P27:T27) sieht wie folgt aus: 10, 12, 15, 46, 48
(...)
Set 14 (Zeile P40:T40) sieht wie folgt aus: 7, leere Zelle, leere Zelle, leere Zelle, leere Zelle
Leere Zellen im Bereich P27:T40 werden ignoriert und dürfen auf keinen Fall als Zellen mit dem Wert 0 angesehen werden.

Aus den Zahlen-Sets in Tabelle 1 (P6:T19) möchte ich "Set-Kombinationen" erstellen, d. h. ich wähle beispielsweise einfach das erste Zahlen-Set, das dritte Zahlen-Set und das sechste Zahlen-Set aus und gruppiere sie dann. Ich werde eine solche Beispielkombination von Sets manuell als 1, 3, 6 eingeben, wobei jede dieser Zahlen in einer separaten Zelle platziert wird, die in einer bestimmten Zeile des Bereichs AB5:AG1000 nebeneinander liegen würde. Da dies die erste Kombination wäre, würde das Set 1, 3, 6 in AB5:AD5 platziert. Da der Bereich AB5:AG1000 6 Spalten umfasst, könnten insgesamt 6 verschiedene Sets von Zahlen ausgewählt werden, um ein Kombinations-Set zu bilden. Der Bereich AB5:AG1000 ist also wieder eine leere Tabelle, in die ich manuell Zahlen eingeben möchte, die den vorgegebenen Sets aus der ersten Tabelle (P6:T19) entsprechen.

Aus den Zahlen-Sets in der Tabelle  2 (P27:T40) möchte ich auch "Set-Kombinationen" erstellen, d. h. einfach z. B. das erste Zahlen-Set, das fünfte Zahlen-Set und das zehnte Zahlen-Set auswählen und sie dann gruppieren. Ich möchte eine solche Beispiel  Set-Kombination manuell eingeben, z. B. als 1, 5, 10, wobei diese Zahlen in separaten Zellen stehen werden, die aneinander angrenzen. Hierfür habe ich einen Bereich AI5:AN1000 erstellt. Dies ist eine leere Tabelle, in die ich manuell die Zahlen eingeben möchte, die den gegebenen Sets aus der anderen Tabelle (P27:T40) entsprechen.
Leere Zellen in den Bereichen AB5:AG1000 und AI5:AN1000 sollen ignoriert werden und auf keinen Fall als mit dem Wert 0 versehen angesehen werden.
Die Set-Kombinationen in AB5:AG1000 und AI5:AN1000 werde ich manuell eingeben, bevor ich das Makro starte.

Nehmen wir also an, ich habe einige Set-Kombinationen aus der ersten Tabelle in AB5:AG1000 und einige Set-Kombinationen aus der zweiten Tabelle in AB5:AG1000 eingegeben. Dann möchte ich aus diesen Set-Kombinationen Paare bilden. Die Paarbildung soll eine Set-Kombination aus der ersten Tabelle und eine Set-Kombination aus der zweiten Tabelle umfassen. Die Paarbildung soll auf der Grundlage der Fähigkeit des Paares erfolgen, " Ziffernkombinationen " zu bilden. Die Bildung von Ziffernkombinationen wiederum erfolgt auf der Basis der Zahlen die sich in den Zahlensets befinden, die ein Paar von Set-Kombinationen aus beiden Tabellen bilden.

Nochmal zum besseren verstehen:
• Zahlensets sind die 28 Sets (je 14 pro Tabelle);
• Set-Kombinationen sind Gruppen von Zahlensets;
• eine Zifferkombination ist ein Zahlensatz bestehend aus den Zahlen die in den Zahlensets vorkommen.

Zifferkombinationen sollen nach klaren Regeln gebildet werden:
1. Aus Ausgangspunkt gilt - es gibt zwei Set-Kombinationen (Set-Kombination 1 und Set-Kombination 2), und in jedem der jeweiligen Sets sind Zahlen enthalten.
2. Zahlen, die nur in Zahlensets einer der beiden Set-Kombinationen vorkommen, müssen weggelassen werden und nehmen nicht an den nächsten Schritten teil. Mit anderen Worten - man muss identische Zahlen innerhalb der beiden Set-Kombinationen identifizieren, also feststellen, welche Zahlen sowohl in allen Sets, die Set-Kombination 1 bilden, als auch in allen Sets, die Set-Kombination 2 bilden, vorkommen. Es ist auch wichtig und notwendig, die Tatsache zu berücksichtigen, aus welchen konkreten Zahlensets diese gemeinsamen Zahlen stammen, denn jede Zahl in der endgültigen Ziffernkombination (oder auch Ziffernkombinationen, denn es werden eher mehrere sein) wird aus einem bestimmten Set des ersten Kombinations-Sets und einem bestimmten Set des zweiten Kombinations-Sets stammen. Mit anderen Worten: jede Zahl in der Ziffernkombination muss aus einem einzigartigen Set aus beiden Kombinations-Sets stammen. Jedes Set muss in der Zahlenkombination durch eine daraus abgeleitete Zahl vertreten sein.
3. Dann besteht die Aufgabe darin, eine Zahlenkombination so zu bilden, dass man eine beliebige Zahl aus einem der Sets der ersten Set-Kombination auswählt und versucht, eine identische Zahl in einem der Sets der zweiten Set-Kombination zu finden* (wenn eine Zahl ausgewählt wird, die es nicht erlaubt, eine Zahlenkombination nach den von mir aufgestellten Regeln zu bilden, dann sollte dieser Versuch als ungültig betrachtet und verworfen werden. Es wird dann eine neue gemeinsame Zahl gewählt). Wenn dies gelingt, geht diese gemeinsame Zahl in die Zahlenkombination ein. Dabei ist zu beachten, aus welchen beiden Sets diese Zahl abgeleitet wurde, denn wenn eine identische Zahl bereits in zwei Sets gefunden wurde, die sich in zwei verschiedenen Set Kombinationen befinden, können die anderen verbleibenden Zahlen aus diesen Sets nicht mehr an der Bildung der Ziffernkombination beteiligt werden. Sie werden sozusagen ausgekreuzt und können nicht mehr zur Bildung von der Ziffernkombination verwendet werden. Es ist wichtig zu beachten, dass diese ausgekreuzten Zahlen auch in anderen Sets als den beiden Sets, aus denen die identische Zahl gewählt wurde, vorhanden sein können und ebenfalls eliminiert werden müssen. Wenn also eine gemeinsame Zahl in die Zifferkombination kommt, so sind dabei zwei Sets (je eins pro Set-Kombination) schon mal raus.
4. Im nächsten Schritt wird unter den Zahlen, die nach dem Auskreuzen übrig bleiben, nach einer weiteren identischen Zahl gesucht, also dann wird erneut nach einer Zahl gesucht, die sowohl in einem der Sets vorkommt, die in der ersten Set-Kombination enthalten sind, als auch in einem der Sets, die in der zweiten Set-Kombination enthalten sind. Und eine solche Zahl wird die nächste in der Ziffernkombination sein. Sobald eine solche Zahl gefunden ist, dürfen die übrigen Zahlen in den Sets, aus denen diese Zahl entnommen wurde, nicht mehr verwendet werden (wenn diese Zahlen auch in anderen Sets vorkommen, werden sie auch aus diesen ausgekreuzt), um eine Ziffernkombination zu bilden. Das Auskreuzen geschieht also wieder so, wie ich es vorhin in Punkt 3 erklärt habe.
5. Der ganze Prozess wird so lange fortgesetzt, bis aus jedem Set aus beiden Set-Kombinationen, eine Zahl entnommen wird, die in zwei Sets vorkommt - eine aus jedem der Sets, die in der ersten Set-Kombination enthalten sind, und eine aus den Sets, die in der zweiten Set-Kombination enthalten sind.
6. *Es ist von Vorteil mit der Zahl/den Zahlen anzufangen, die in dem Set mit den wenigsten Zahlen vorkommen, denn da jedes Set in der Zifferkombination vertreten sein muss ist es z.B. sofort klar, dass wenn in einem Set nur eine, einzige Zahl vorhanden ist, dass diese dann in der Zifferkombination enthalten werden muss. Außerdem ist das auch hilfreich beim Ermitteln ob zwei Set-Kombinationen überhaupt ein Paar bilden können, denn wenn diese einzige  Zahl in keinem der Sets der zweiten Set-Kombination vorkommt so kann keine Ziffernkombination gebildet werden.
7. Nachdem die Ziffernkombination vervollständigt wurde, müssen die ausgekreuzten Zahlen wiederhergestellt werden.
8. Die Zahlen, die zur Bildung der Zifferkombination verwendet wurden, müssen auch zur Bildung neuer Zifferkombinationen zur Verfügung stehen (wenn also eine Zifferkombination gebildet wurde, werden die Zahlen, aus denen sie besteht, nicht verworfen). Der Trick besteht darin, keine Ziffernkombinationen zuzulassen, die Duplikate sind - siehe Punkt 10)
9. Die Punkte 3, 4, 5 werden so lange wiederholt, bis alle möglichen Ziffernkombinationen gefunden sind.
10. Um sicherzustellen, dass die Zahlenkombinationen nicht identisch sind, muss der VBA-Code prüfen, ob eine solche Zahlenkombination bereits erstellt wurde, und dann automatisch versuchen eine neue Ziffernkombination erstellen, aber mit einen anderen Ansatz als den, der zum Duplikat geführt hat (also entweder mit einer anderen Zahl zu beginnen oder irgendwo auf dem Weg zur Erstellung einer Zifferkombination eine andere gemeinsame Zahl zu wählen).
11. Die fertigen Ziffernkombinationen müssen natürlich irgendwo auf dem Arbeitsblatt erscheinen. Hierfür möchte ich den Bereich AP6:AY10000 verwenden. Ich möchte, dass alle möglichen Ziffernkombinationen in den einzelnen Reihen dieses Bereiches erscheinen. Bitte beginnen Sie damit, die erste Zahl der Zahlenkombinationen in der Spalte AP zu platzieren. Außerdem sollten die Zahlen, die in einer Ziffernkombination enthalten sind, in aufsteigender Reihenfolge stehen. Die Ziffernkombinationen sind beginnend mit derjenigen zu platzieren, die die kleinste Zahl als erste Zahl hat.

Jetzt gebe ich noch ein Konkretes Beispiel:
• Die erste Set-Kombination ist 1, 3, 6. Denken Sie daran, dass 1, 3, 6 von mir manuell in AB5:AD5 (d.h. in den Bereich AB5:AG1000) eingegeben wurden und sich auf die Zahlensets beziehen, die in der ersten Tabelle (P6:T19) stehen.
 im Set Nr. 1 (d.h. in der Zeile P6:T6), d.h. in dem Set, dem die 1 entspricht, befinden sich die Zahlen: 6, 19, 32, 39, 42,
 im Set Nr. 3 (Zeile P8:T8) sind die Zahlen: 21, 34, 48,
 im Set 6 (d.h. Zeile P11:T11) sind die Zahlen: 2, 22, 46.
• Die zweite Set-Kombination besteht aus den Sets 1, 5, 10. Denken Sie daran, dass 1, 5, 10 von mir manuell in AI5:AK5 (d.h. in den Bereich AI5:AN1000, von dem ich Ihnen vorhin erzählt habe) eingegeben wurden und sich auf die Zahlensets beziehen, die sich in der zweiten Tabelle (P27:T40) befinden.
 im Set Nr. 1 (d.h. in der Zeile P27:T27) befinden sich die Zahlen: 10, 12, 15, 46, 48,
 im Set Nr. 5 (d.h. Zeile P31:T31) befinden sich die Zahlen: 6, 19, 42,
 im Set Nr. 10 (d.h. Zeile P37:T37) sind die Zahlen: 2, 21, 40.
• Zunächst muss das Makro feststellen, welche Zahlen in beiden Set-Kombinationen gemeinsam sind, und den Rest der Zahlen weglassen. 
Im Falle der Sets, die die Set-Kombination 1 bilden bleiben:
 in Set 1 (Zeile P6:T6) 6, 19, 42,
 in Set 3 (Zeile P8:T8) 21, 48
 in Set 6 (Zeile P11:T11) 2, 46 übrig.
Bei den Sets, die die Set-Kombination 2 bilden, bleiben:
 in Set 1 (Reihe P27:T27) 46, 48,
 in Set 5 (Reihe P31:T31) 6, 19, 42
 in Set 10 (Reihe P37:T37) 2, 21 übrig.
• Nun muss der VBA-Code die Ziffernkombinationen auf der Grundlage der übrigen Zahlen erstellen.
• Eine gemeinsame Zahl ist z. B. die Zahl 2, die sowohl in Set 6 (Tabelle 1, Zeile P11:T11) als auch in Set 10 (Tabelle 2, Zeile P37:T37) vorkommt.
• Nun muss also die Zahl 46 sowohl aus Set 6 (Tabelle 1, Zeile P11:T11) in Set-Kombination 1 als auch aus Set 1 (Tabelle 2, Zeile P27:T27) in Set-Kombination 2 gestrichen werden. Und da die Nummer 2 gewählt wurde, bedeutet dies auch, dass die Nummer 21 aus Set 10 in Set-Kombination 2 ausgekreuzt werden muss, und da die Nummer 21 ausgekreuzt werden muss, muss dies auch in Set 3 in Set-Kombination 1 geschehen.
• Damit bleibt in Set 1 in der Set-Kombination 2 nur noch die Zahl 48 übrig (da die 46 durchgestrichen wurde), also muss sie als gemeinsame Zahl gewählt werden. Sie kann gewählt werden, weil die Zahl 48 auch im Set 3 der Set-Kombination 1 vorkommt.
• Jetzt ist man an einem Punkt angelangt, an dem gemeinsame Zahlen für 4 von 6 Sets gefunden wurden. Bleibt nur noch, eine gemeinsame Zahl zwischen Set 1 in Set-Kombination 1 und Set 5 in Set-Kombination 5 zu finden.
• Da beide Sets genau 3 identische Zahlen enthalten, kann man in diesem speziellen Fall drei Zifferkombinationen bilden, nämlich:
 2, 6, 48
 2, 19, 48
 2, 42, 48.
• Nach der Erstellung der möglichen Zifferkombinationen, die durch die Wahl der Zahl 2 als erste gemeinsame Zahl hätten entstehen können, müssen alle ausgekreuzten Zahlen auf dem Weg, der zur Erstellung der oben erwähnten drei Zifferkombinationen führte, wiederhergestellt werden.
• Das bedeutet auch, dass es einen Mechanismus geben muss, der nicht verhindert, dass die Zahl 2 erneut als gemeinsame Zahl gewählt wird, aber es muss einen Mechanismus geben, der verhindert, dass die gleiche Zahlenkombination entsteht.
• Jetzt kann eine andere gemeinsame Zahl gewählt werden. Zum Beispiel die Zahl 46 in Set 6 in Set-Kombination 1. Set 1 in Set-Kombination 2 enthält ebenfalls die Zahl 46.
• Folglich muss die Zahl 2 aus Set 6 in Set-Kombination 1, aber auch aus Set 10 in Set-Kombination 2 ausgekreuzt werden. Dasselbe gilt für die Zahl 48 in Set 1 in Set-Kombination 2.
• Da außerdem die Zahl 48 aus Set 3 in Set-Kombination 1 ausgekreuzt werden muss, bleibt die Zahl 21 als einzige mögliche Zahl aus Set 3 in Set-Kombination 1 übrig, die in einem der Sets aus Set-Kombination 2 eine gemeinsame Zahl sein könnte. Zufälligerweise taucht die Zahl 21 auch in Set 10 von Set-Kombination 2 auf, so dass die Zahl 21 nach der Zahl 46 gewählt werden kann, um eine Zifferkombination zu bilden, aber das ist noch nicht das Ende, denn es wird immer noch eine gemeinsame Zahl zwischen Set 1 von Set-Kombination 1 und Set 5 von Set-Kombination 2 benötigt.
• Da diese beiden Sets zufälligerweise genau dieselben drei Zahlen enthalten, können alle diese drei Zahlen die Zahlen 21 und 46 ergänzen und so die nächsten drei numerischen Sets bilden, nämlich:
 6, 21, 46
 19, 21, 46
 21, 42, 46.
Um zusammenzufassen- die richtigen Zifferkombinationen, die aus den Sets 1, 3, 6 in Tabelle 1 und den Sets 1, 5, 10 in Tabelle 2 gebildet werden, lauten also wie folgt:
1. 2, 6, 48
2. 2, 19, 48
3. 2, 42, 48
4. 6, 21, 46
5. 19, 21, 46
6. 21, 42, 46
Und diese sollen auch im Bereich AP6:AY10000, in dieser Reihenfolge Erscheinen.


Angehängte Dateien
.xlsm   machine almost.xlsm (Größe: 48,22 KB / Downloads: 6)
Antworten Top
#2
Hi,

wenn Du schon so einen tollen Plan geschrieben hast, dann gehe damit zu einem Dienstleister, der bereit ist das durchzulesen.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#3
Listen der Kombinatorik (kostenloses Excel Web oder 365 verwenden) 
(ich weigere mich auch, mehr als den obersten Anfang zu lesen und zu verstehen)
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#4
Hallöchen,

das erinnert mich irgendwie daran:

Thread-Formel-fuer-das-Kombinieren-von-Zahlen-aus-2-Tabellen
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • PIVPQ
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste