ich habe bereits hier einige Fragen gestellt und immer eine nützliche Antwort erhalten. Ich habe schon seit längerem nach einer Prozedur/Funktion gesucht, die ein zweidimensionales Array sortiert und dabei eine bestimmte Spalte annimmt, sowie die Sortierrichtung (aufsteigend/absteigend) beachtet.
Ich bin nun fündig geworden und habe die Prozedur, die nach der QuickSort-Methode arbeitet, noch etwas angepasst, so dass sie - so denke ich - dem ein oder anderem nützlich erscheinen mag:
Der Code
'| Prozedur: multi_sort_array
'| Parameter:
'| arrData, VARIANT, Array, zweidimensional: Array, das die Daten enthält, die
'| sortiert werden sollen
'| lngColumn, LONG: Spaltennummer, die angibt, welche Spalte im Array arrData
'| sortiert werden soll, auf Nullbastierung achten! Spalte 1 = 0
'| typSort, EXCELKONSTANTE, optional: Gibt die Sortierreihenfolge an.
'| Standard: aufsteigend
'| lngStart, LONG, optional: technischer Parameter, wird nur zur Rekursion benötigt
'| lngEnd, LONG, optional: technischer Parameter, wird nur zur Rekursion benötigt
'| Quelle: http://www.vbarchiv.net/tipps/tipp_1881-2-dimensionales-array- _
_
_
_
_
_
_
_
nach-beliebiger-spalte-sortieren.html
'| Erklärung der QuickSort-Methode: https://msdn.microsoft.com/de-de/library/Bb979305.aspx
Private Sub multi_sort_array( _
arrData As Variant, _
Optional ByVal lngColumn As Long = 0, _
Optional typSort As XlSortOrder = 1, _
Optional ByVal lngStart As Long = -1, _
Optional ByVal lngEnd As Long = -1)
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
If lngStart = -1 Then lngStart = LBound(arrData)
If lngEnd = -1 Then lngEnd = UBound(arrData)
lb_dim = LBound(arrData, 2)
ub_dim = UBound(arrData, 2)
i = lngStart: j = lngEnd
x = arrData((lngStart + lngEnd) / 2, lngColumn)
Do
If typSort = xlAscending Then
While (arrData(i, lngColumn) x): j = j - 1: Wend
Else
While (arrData(i, lngColumn) > x): i = i + 1: Wend
While (arrData(j, lngColumn) j)
If (lngStart
Das bringt sie
Es gibt im Netz einige verschiedene Umsetzungen der Quicksort-Methode, nur leider fand ich nie das, was ich brauchte: Eine Prozedur mit der ich ein zweidimensionales Array nach einer bestimmten Spalte entweder absteigend oder aufsteigend sortieren konnte.
Nun habe ich alles zusammengefunden und entsprechend angepasst.
Ich hoffe, es hilft und freue mich, wenn du mir eine Rückmeldung gibst, falls an dem Code irgendetwas nicht stimmen sollte (oder vielleicht es noch etwas besseres gibt). Ich lerne gerne.
Gruß
Erik