Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1532to1536
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

Zweidimensionales Array mehrfach sortieren

Zweidimensionales Array mehrfach sortieren
04.01.2017 21:42:43
Erik
Liebe Gemeinde,
ich versuche seit einiger Zeit ein zweidimensionales Array mehrfach zu sortieren. Es handelt sich dabei um ein Array, das in Spalte 3 und 4 Nachnamen und Vornamen von Klienten enthält. Ich möchte das Array gern erst nach den Vornamen und dann nach den Nachnamen sortieren.
Ich habe sowohl die Prozedur von Nepumuk bemüht (http://www.online-excel.de/excel/singsel_vba.php?f=97) als auch die reine QuickSort-Methode (http://www.vbarchiv.net/tipps/tipp_1881-2-dimensionales-array-nach-beliebiger-spalte-sortieren.html).
Beides führt leider nicht zum Erfolg. Zwar ist das gesamte Array am Ende nach den Nachnamen sortiert, aber innerhalb gleicher Nachnamen stimmt die Sortierung der Vornamen nicht mehr.
Erschwerend kommt hinzu, dass bei der Methode von Nepumuk bei Angabe bestimmter Spalten (in meinem Fall Spalte 3), die Prozedur mit "Index außerhalb des gültigen Bereichs" aussteigt, bei Spalte 1, 2 und 4 aber anstandslos arbeitet.
Die Zeile, wo sie aussteigt ist, liegt in der Prozedur "prcSort" ziemlich am Ende:

lngRowsArray(0, lngRowsCount) = lngRowsArray(1, lngIndex1 + 1)
Mein (Test-)Array umfasst 5 Zeilen und 36 Spalten und enthält Zahlen und Text.
Ich würde mich sehr drüber freuen, wenn mir jemand einen Tipp geben könnte, warum die Methoden nicht wie gewünscht funktionieren (Vielleicht liegt es auch am 64bit-System?).
Gutes Neues und besten Dank
Erik

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zweidimensionales Array mehrfach sortieren
04.01.2017 21:57:53
Daniel
Hi
Quicksort ist ein instabiles Sortierverfahren.
das bedeutet, dass Elemente mit gleichem Wert ihre Reihenfolge untereinander während des Sortierens verändern können.
Daher ist Quicksort nicht dafür geeignet, ein Sortieren nach mehreren Kriterien durch mehrfach hintereinander geschaltetes Sortieren zu realisieren.
Du müsstest da ein anderes, stabiles Sortierverfahren verwenden.
die einfachste Methode wäre, das Array in eine Exceltabelle zu schreiben, dort mit der Excel-Sortierfunktion zu sortieren (die ist stabil) und dann wieder die sortierten Werte aus der Tabelle ins Array einzulesen.
Gruß Daniel
Anzeige
Daniel hat recht. Du könntest aber ...
05.01.2017 08:27:25
lupo1
... ein (Spalten-) Feld im Array freihalten und dieses temporär mit
Nachname&Vorname&Format(Arrayzeilennummer;"0000000")
füllen und danach quicksortieren. Dann reicht auch ein einzelner Sort aus.
Wichtige Verbesserung
05.01.2017 09:11:56
lupo1
Nachname&Vorname&Format(Arrayzeilennummer;"0000000")
würde
Meyer Joerg
Meyer Jürgen
Meyerjohn Axel
falsch sortieren. Daher besser:
Nachname&"#"&Vorname&Format(Arrayzeilennummer;"0000000")
AW: Wichtige Verbesserung
05.01.2017 15:43:18
Erik
Lieber Daniel, lieber Lupo1,
besten Dank für eure Hinweise. Ich glaube, ich werde die stabile Sortierung im Tabellenblatt verwenden, da die Daten aus dem Array ohnehin aus einem ListObject stammen.
Nur mal ins Blaue gefragt: Wäre trotz weniger Leistungsfähigkeit in diesem Fall BubbleSort einen Versuch wert?
Grüße
Erik
Anzeige
AW: Wichtige Verbesserung
05.01.2017 15:44:01
Erik
Lieber Daniel, lieber Lupo1,
besten Dank für eure Hinweise. Ich glaube, ich werde die stabile Sortierung im Tabellenblatt verwenden, da die Daten aus dem Array ohnehin aus einem ListObject stammen.
Nur mal ins Blaue gefragt: Wäre trotz weniger Leistungsfähigkeit in diesem Fall BubbleSort einen Versuch wert?
Grüße
Erik
Vergleich der Sortierverfahren bei Wikipedia
06.01.2017 07:31:50
lupo1
https://de.wikipedia.org/wiki/Sortierverfahren
zeigt, dass es auch weitere so effiziente Verfahren gibt, wie den Quicksort, aber stabil.
Zum Bubble-Sort: Der ist gut,
- um etwas EINZUSORTIEREN (die Liste ist also schon annähernd vorsortiert), oder
- bei wenigen Daten überhaupt.
Anzeige
AW: Wichtige Verbesserung
06.01.2017 14:07:35
Daniel
kommt darauf an, was dein Ziel ist.
wenn du einfach nur ein sortiertes Array haben willst: nein
wenn du dich tiefer in die Materie "Programmieren von Sortieralgorhythmen" einarbeiten willst: ja
Gruß Daniel
AW: Wichtige Verbesserung
08.01.2017 20:54:27
Erik
Hallo Daniel und Lupo1,
na gut, dann bleibe ich erstmal bei der Excelvariante, die Liste vorher zu sortieren und dann das Ergebnis in ein Array zu laden.
Ich habe mir die Sortierverfahren im Wikipedia-Artikel angeschaut - für mich sind das leider spanische Dörfer. :)
Danke euch!
Gruß
Erik

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige