Hallo zusammen,
ich habe folgendes Problem: Ich habe mit Hilfe von VBA ein Makro für Excel erstellt, welches zunächst in den Spalten 1 bis 4 mit den Zahlen 1 bis 4 alle Permutationen abbildet. D.h. das Makro generiert alle möglichen Kombinationen, welche sich aus diesen 4 Ziffern bilden lassen, ohne Wiederholungen zu zu lassen.
Exemplarisch sieht das dann so aus:
1 2 3 4
1 2 4 3
1 4 2 3
1 4 3 2
...
So gehts weiter bis die 24 Möglichkeiten abgebildet sind. Dies funktioniert auch so weit ganz gut.
Mein Ziel ist es nun die Reihenfolge der Zahlen in den Spalten 6 bis 9 abzubilden. Dies habe ich versucht über die Position der Zahlen auszudrücken. Wenn man davon ausgeht, dass die Gundreihenfolge 1 2 3 4 ist, so ist bei der ersten Möglichkeit die Reihenfolge ebenfalls 1 2 3 4. D.h. die 1 ist an der 1. Position, die 2 and der 2. Position usw...
Für die Permutation 4 3 1 2 wäre die Reihenfolge / Position dann zum Beispiel 3 4 2 1. Nochmal kurz zum Verständnis: die 1 an 3. Position, die 2 an 4. Position, die 3 an 2. Position und die 4 an 1. Position.
Ich habe bereits eine Möglichkeit gefunden diese Positionsbestimmung durchzuführen - das Problem ist jedoch, dass die Methode relativ langsam ist, da sie so lange Schleifen durchläuft bis für jede einzelne Spalte pro Zeile die Reihenfolge abgebildet ist.
'Reihenfolge bilden
Dim Rang As Long
Dim Position As Long
Position = 6 '1. Spalte der Reihenfolgetabelle
Do While Position < 10 'Nummer ist eins höher als letzte Spalte der Reihenfolgetabelle
Rang = Application.Match((Cells(1, Position)), Range((Cells(Zeile, 1)), (Cells(Zeile, 4))), 0) 'Range für Permutationstabelle
Cells(Zeile, Position) = Rang
Position = Position + 1
Loop
Anmerkung: Die Grundreihenfolge steht in der 1. Zeile der Reihenfolgetabelle (Spalte 6 bis 9). Application.Match nutzt diese Grundreihenfolge, um einen Abgleich mit den ersten 4 Spalten zu machen.
Jetzt könnte man natürlichen sagen, dass das nicht allzu lange dauert für 24 Möglichkeiten. Mein Ziel ist jedoch diese Permutationstabelle zu vergrößern. Bei 10 Ziffern handelt es sich schon um 3,6 Mio Möglichkeiten und da bremst diese Reihenfolge-Schleife ziemlich. Und sie soll eigentlich noch größer werden.
Hat irgendjemand eine Idee wie sich die Reihenfolge-/Positionsbestimmung schneller durchführen lässt? Vielleicht in einem einzigen Schritt pro Zeile?
Falls etwas nicht verstanden wurde weil ich es zu kompliziert oder nicht ausreichend erklärt habe bin ich auch gerne bereit mein Thema noch weiter zu erläutern.
Vielen Dank im Voraus!
Bo2k
|