Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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
Anzeige

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")
Anzeige
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
Anzeige
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
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zweidimensionales Array mehrfach sortieren


Schritt-für-Schritt-Anleitung

  1. Daten vorbereiten: Stelle sicher, dass dein zweidimensionales Array die Daten in der gewünschten Struktur hat, zum Beispiel Nachnamen in Spalte 3 und Vornamen in Spalte 4.

  2. Wähle ein stabiles Sortierverfahren: Da du nach mehreren Kriterien sortieren möchtest, ist es wichtig, ein stabiles Sortierverfahren wie Bubble Sort oder Quicksort stabil zu verwenden.

  3. VBA-Prozedur erstellen: Erstelle eine neue VBA-Prozedur, um das Array zu sortieren. Hier ist ein einfaches Beispiel für einen Bubble Sort:

    Sub BubbleSortArray(arr As Variant)
       Dim i As Long, j As Long
       Dim temp As Variant
       For i = LBound(arr, 1) To UBound(arr, 1) - 1
           For j = LBound(arr, 1) To UBound(arr, 1) - i - 1
               If arr(j, 3) > arr(j + 1, 3) Or (arr(j, 3) = arr(j + 1, 3) And arr(j, 4) > arr(j + 1, 4)) Then
                   ' Tauschen
                   temp = arr(j)
                   arr(j) = arr(j + 1)
                   arr(j + 1) = temp
               End If
           Next j
       Next i
    End Sub
  4. Prozedur aufrufen: Rufe die BubbleSortArray-Prozedur mit deinem Array auf und überprüfe die Ergebnisse.


Häufige Fehler und Lösungen

  • Index außerhalb des gültigen Bereichs: Dieser Fehler kann auftreten, wenn du auf eine nicht existierende Zeile oder Spalte zugreifen möchtest. Überprüfe die Grenzen deines Arrays.

  • Instabile Sortierung: Wenn du Quicksort verwendest, kann es sein, dass die Reihenfolge von Elementen mit gleichen Werten nicht erhalten bleibt. Verwende stattdessen eine stabile Methode wie BubbleSort oder eine Excel-Sortierfunktion.


Alternative Methoden

  • Excel-Sortierfunktion: Eine einfache Möglichkeit, das Array zu sortieren, besteht darin, die Daten in eine Excel-Tabelle zu übertragen, dort mit der integrierten Sortierfunktion zu sortieren und dann das Ergebnis zurück ins Array zu laden.

  • VBA Quicksort: Wenn du dich für ein schnelleres Verfahren entscheiden möchtest, kannst du auch eine stabile Version von Quicksort implementieren. Hierbei ist es wichtig, dass die Implementierung stabil bleibt, um die Reihenfolge bei gleichen Werten nicht zu verlieren.


Praktische Beispiele

  1. Sortierung nach Nachnamen und Vornamen: Angenommen, dein Array enthält die folgenden Namen:

    • Meyer, Jürgen
    • Meyer, Joerg
    • Meyerjohn, Axel

    Mit dem oben genannten Bubble Sort-Verfahren wird das Array korrekt zuerst nach Nachnamen und dann nach Vornamen sortiert.

  2. Sortierung in Excel: Du kannst die Daten in eine Tabelle einfügen und die Excel-Funktion "Sortieren" verwenden, um die Daten nach mehreren Kriterien zu sortieren (z.B. nach Nachnamen und dann nach Vornamen).


Tipps für Profis

  • Optimierung des Bubble Sort: Obwohl Bubble Sort einfach zu implementieren ist, ist es ineffizient für große Datenmengen. Überlege, ob du auf Quicksort oder andere Sortieralgorithmen umsteigen möchtest.

  • Fehlerprotokollierung: Füge in deiner VBA-Prozedur Fehlerbehandlungsroutinen hinzu, um besser nachvollziehen zu können, wo und warum Fehler auftreten.


FAQ: Häufige Fragen

1. Wie kann ich ein mehrdimensionales Array in VBA sortieren? Du kannst eine eigene Sortierprozedur wie Bubble Sort oder Quicksort implementieren oder die Excel-Sortierfunktion verwenden, um die Daten stabil zu sortieren.

2. Was ist der Unterschied zwischen stabilen und instabilen Sortierverfahren? Stabile Sortierverfahren bewahren die relative Reihenfolge der gleichen Werte während des Sortierens, während instabile Verfahren dies nicht garantieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige