Wie man ein einfaches Array sortieren kann, haben wir bereits mehrfach gezeigt. Wie sieht es aber mit einem 2-dimensionalen Array, das nach einer bestimmten Spalte sortiert werden soll?
Genau das zeigen wir Ihnen heute mit diesem Tipp! Nachfolgende Funktion sortiert das übergebene 2-dimensionale Array nach der angegebenen Spalte, wobei der Spaltenindex hier bei 1 beginnt:' vSort: 2-dimensionales Array ' index: Spalte, nach der sortiert werden soll (1, 2, 3, ...) Public Sub QuickSortMultiDim(vSort As Variant, _ Optional ByVal index As Integer = 1, _ Optional ByVal lngStart As Variant, _ Optional ByVal lngEnd As Variant) ' Wird die Bereichsgrenze nicht angegeben, ' so wird das gesamte Array sortiert If IsMissing(lngStart) Then lngStart = LBound(vSort) If IsMissing(lngEnd) Then lngEnd = UBound(vSort) Dim i As Long Dim j As Long Dim h As Variant Dim x As Variant Dim u As Long Dim lb_dim As Integer Dim ub_dim As Integer ' Anzahl Elemente pro Datenzeile lb_dim = LBound(vSort, 2) ub_dim = UBound(vSort, 2) i = lngStart: j = lngEnd x = vSort((lngStart + lngEnd) / 2, index - 1) ' Array aufteilen Do While (vSort(i, index - 1) < x): i = i + 1: Wend While (vSort(j, index - 1) > x): j = j - 1: Wend If (i <= j) Then ' Wertepaare miteinander tauschen For u = lb_dim To ub_dim h = vSort(i, u) vSort(i, u) = vSort(j, u) vSort(j, u) = h Next u i = i + 1: j = j - 1 End If Loop Until (i > j) ' Rekursion (Funktion ruft sich selbst auf) If (lngStart < j) Then QuickSortMultiDim vSort, index, lngStart, j If (i < lngEnd) Then QuickSortMultiDim vSort, index, i, lngEnd End Sub Kleines Anwendungsbeispiel: ' 2-dimensionales Array ' 10 Zeilen á 5 Spalten Dim MyData(0 To 9, 0 To 4) ' Array füllen AddToArray MyData, 0, 1, "Otter Dieter", 35, CDate("05.05.1973"), 981 AddToArray MyData, 1, 2, "Meier Julia", 33, CDate("12.08.1974"), 851 AddToArray MyData, 2, 3, "Müller Hugo", 49, CDate("01.12.1958"), 612 AddToArray MyData, 3, 4, "Schmitt Hans", 26, CDate("19.02.1981"), 971 AddToArray MyData, 4, 5, "Müller Anton", 71, CDate("13.10.1968"), 421 AddToArray MyData, 5, 6, "Maier H.", 17, CDate("16.04.1986"), 468 AddToArray MyData, 6, 7, "roSoft", 48, CDate("27.12.1952"), 419 AddToArray MyData, 7, 8, "Mustermann Max", 74, CDate("02.06.1971"), 149 AddToArray MyData, 8, 9, "Schmidt G.", 62, CDate("17.02.1952"), 148 AddToArray MyData, 9, 10, "A. Herbert", 27, CDate("26.11.1963"), 174 ' Array nach 4. Spalte sortieren QuickSortMultiDim MyData, 4 ' Hilfsfunktion: 2-dimensionales Array schneller füllen Private Function AddToArray(ByRef arDaten As Variant, _ ByVal index As Long, _ ParamArray values() As Variant) Dim i As Long For i = 0 To UBound(values) arDaten(index, i) = values(i) Next i End Function Dieser Tipp wurde bereits 50.900 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
||||||||||||||||||||||||||||||||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |