So hier noch der erweiterte VBA-Code
DIese VBA-Routine wird benötigt, da sehr oft sortiert wird und sich die Werte zum Sortieren bereits in einer VBA-Variable befinden. Würde man die Excel-Tabellen-Sortierfunktion verwenden wollen müßte man erst alles in ein Tabellenblatt schreiben - und danach das sortierte Ergebnis wieder in die Array-Variable einlesen.
Und das ist trotz diverser Tricks sehr zeitaufwendig. Daher der ganze Aufwand ...
Zu Demozwecken werden die Felder der Excel-Tabelle automatisch gefüllt
Index_neu ist die Plazierung des sortierten Wertes vor dem Sortieren
Nochmals Muchas grazies an nighty!!!
SPAM kommt auch noch! ;-)
Sub Array_mit_Index_sortieren()
' Attentione: Ggf. vorhandene Werte in der Excel-Tabelle werden
' ohne weiteres Nachfragen überschreiben
Range("A1").Select
ActiveCell.FormulaR1C1 = "Zum Sortieren"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Index_alt"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Sortiert"
Range("D1").Select
ActiveCell.FormulaR1C1 = "Index_neu"
Range("A2").Select
ActiveCell.FormulaR1C1 = "154"
Range("A3").Select
ActiveCell.FormulaR1C1 = "853"
Range("A4").Select
ActiveCell.FormulaR1C1 = "654"
Range("A5").Select
ActiveCell.FormulaR1C1 = "954"
Range("A6").Select
ActiveCell.FormulaR1C1 = "354"
Range("A7").Select
ActiveCell.FormulaR1C1 = "856"
Range("A8").Select
ActiveCell.FormulaR1C1 = "458"
Range("A9").Select
ActiveCell.FormulaR1C1 = "658"
Range("A10").Select
ActiveCell.FormulaR1C1 = "745"
Range("B2").Select
ActiveCell.FormulaR1C1 = "1"
Range("B3").Select
ActiveCell.FormulaR1C1 = "2"
Range("B4").Select
ActiveCell.FormulaR1C1 = "3"
Range("B5").Select
ActiveCell.FormulaR1C1 = "4"
Range("B6").Select
ActiveCell.FormulaR1C1 = "5"
Range("B7").Select
ActiveCell.FormulaR1C1 = "6"
Range("B8").Select
ActiveCell.FormulaR1C1 = "7"
Range("B9").Select
ActiveCell.FormulaR1C1 = "8"
Range("B10").Select
ActiveCell.FormulaR1C1 = "9"
Dim i As Long
Dim ar(2 To 10) As Variant
Dim ar2(2 To 10) As Variant
For i = 2 To 10
ar(i) = Cells(i, 1)
ar2(i) = Cells(i, 2)
Next
QuickSort_Field ar, ar2, 2, 10, False
For i = 2 To 10
Cells(i, 3) = ar(i)
Cells(i, 4) = ar2(i)
Next
Cells.Select
Selection.Columns.AutoFit
End Sub
Private Sub QuickSort_Field(DasFeld, DasFeld2, StartUnten, EndeOben, Absteigend As Boolean)
Dim iUnten As Long, iOben, iMitte, y
iUnten = StartUnten
iOben = EndeOben
iMitte = DasFeld((StartUnten + EndeOben) / 2)
While (iUnten <= iOben)
If Not Absteigend Then
While (DasFeld(iUnten) < iMitte And iUnten < EndeOben)
iUnten = iUnten + 1
Wend
While (iMitte < DasFeld(iOben) And iOben > StartUnten)
iOben = iOben - 1
Wend
Else
While (DasFeld(iUnten) > iMitte And iUnten < EndeOben)
iUnten = iUnten + 1
Wend
While (iMitte > DasFeld(iOben) And iOben > StartUnten)
iOben = iOben - 1
Wend
End If
If (iUnten <= iOben) Then
y = DasFeld(iUnten)
y2 = DasFeld2(iUnten)
DasFeld(iUnten) = DasFeld(iOben)
DasFeld2(iUnten) = DasFeld2(iOben)
DasFeld(iOben) = y
DasFeld2(iOben) = y2
iUnten = iUnten + 1
iOben = iOben - 1
End If
Wend
If (StartUnten < iOben) Then Call QuickSort_Field(DasFeld, DasFeld2, StartUnten, iOben, Absteigend)
If (iUnten < EndeOben) Then Call QuickSort_Field(DasFeld, DasFeld2, iUnten, EndeOben, Absteigend)
End Sub