Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1660to1664
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

[VBA] 2-D Array sortieren nach Sp 5, dann Sp 2

[VBA] 2-D Array sortieren nach Sp 5, dann Sp 2
19.12.2018 11:49:38
Nils
Hallo,
ich habe ein 2D Array, was ich sortieren möchte:
Dim arr(0 to 12, 0 to 5) as variant
Die Integer in Spalte 2 und 5 möchte ich sortieren, und zwar zuerst nach Spalte 5 und dann nach Spalte 2, sa dass ich folgendes Ergebnis habe:
x,x,0,x,x,0
x,x,0,x,x,1
x,x,0,x,x,2
x,x,1,x,x,0
x,x,1,x,x,1
x,x,2,x,x,0
x,x,2,x,x,1
x,x,2,x,x,2
x,x,2,x,x,3
x,x,2,x,x,4
x,x,2,x,x,5
x,x,2,x,x,6
x,x,2,x,x,7
Die kursierende 'QuickSort' Funktion führe ich zweimal aus, zuerst nach Spalte 5, dann nach Spalte 2, leider wirft mir der 2. Durchlauf die Spalte 5 wieder durcheinander :-(
Kann mir jemand sagen, wie man das gewünschte Ergebnis erhält?
Grüße
Nils

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: [VBA] 2-D Array sortieren nach Sp 5, dann Sp 2
19.12.2018 12:10:43
Rudi
Hallo,
https://online-excel.de/excel/singsel_vba.php?f=97
Gruß
Rudi
AW: [VBA] 2-D Array sortieren nach Sp 5, dann Sp 2
19.12.2018 12:53:25
Nils
Der Code geht bei mir nicht... leider
lngRowsCount ist außerhalb des gültigen Bereichs.
Sehr merkwürdig
AW: [VBA] 2-D Array sortieren nach Sp 5, dann Sp 2
19.12.2018 13:31:37
Daniel
Hi
Quicksort ist dafür nicht geeignet, weil Quicksort "instabil" ist.
dh die Reihenfolge von Zeilen mit gleichem Wert untereinander ist nicht vorhersehbar und ändert sich gegenüber der Ausgangsliste.
folgende Workarounds wären denkbar:
1. du findest einen Sortieralgorithmus, der stabil sortiert, dann kannst du erst nach Spalte 5 und dann nach Spalte 2 sortieren
2. du fügst dein Array in einen freien Zellbereich einer Exceltabelle ein und sortierst die Werte dort mit der Sortierfunktion von Excel. Die ist nicht nur stabil, sondern kann auch nach mehreren Spalten gleichzeitig sortieren.
Dann liest du den Wert wieder zurück ins Array ein.
Beim Wiedereinlesen wirst du allerdings ein 2-D-Array mit der Basis 1 bekommen.
3. du erweiterst dein Array mit Redim Preserve um eine weitere Spalte.
In diese Spalte schreibst du dann einen kombinierten Wert aus Spalte 2 und Spalte 5 (z.B. Spalte2 * 100 + Spalte5, der Faktor muss eine 10er-Potenz größer sein als der größte Wert in Spalte 5)
jetzt hast du nur einen Wert pro Zeile der die Reihenfolge vorgibt und kannst mit Quicksort in einem Durchlauf deine Liste sortieren.
Danach kannst du die zusätzliche Spalte mit Redim Preserve auch wieder entfernen.
Gruß Daniel
Anzeige

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige