Wie sortiere ich ein array in vba?
Um ein Array in VBA zu sortieren, müssen Sie einen Code schreiben, in dem Sie das erste Element des Arrays mit dem nächsten abgleichen und diese austauschen können, wenn das erste vorher kommen sollte. Sie benötigen hierfür eine FOR-Schleife (For Next) und die UCASE-Funktion .
In diesem Tutorial sehen wir die zwei Möglichkeiten (AZ und ZA), die Elemente eines Arrays zu sortieren.
Sortieren Sie ein Array (AZ)
Im folgenden Code haben Sie ein Array mit fünf Elementen, und diese Elemente haben Werte im Bereich von E bis A, und jetzt müssen wir in der Reihenfolge von A-Z sortieren.
Schritte zum Sortieren eines Arrays
- Zuerst müssen Sie mit „For Next“ eine verschachtelte Schleife schreiben, die die Ober- und Untergrenzen des Arrays verwendet.
- Danach müssen Sie in dieser Schleife die VBA-IF-Anweisung verwenden, um die beiden Elemente zu vergleichen.
- Wenn das erste Element vor dem nächsten Element stehen soll, müssen Sie sie von dort aus austauschen, indem Sie ihre Werte in Variablen speichern.
- Verwenden Sie am Ende das Schlüsselwort „Next“, um die Schleife zu schließen.
Option Base 1 Sub vba_sort_array_a_to_z() Dim myArray() As Variant ReDim myArray(5) Dim i As Integer Dim j As Integer Dim Temp As String myArray(1) = "E" myArray(2) = "D" myArray(3) = "C" myArray(4) = "B" myArray(5) = "A" 'sorting array from A to Z For i = LBound(myArray) To UBound(myArray) For j = i + 1 To UBound(myArray) If UCase(myArray(i)) > UCase(myArray(j)) Then Temp = myArray(j) myArray(j) = myArray(i) myArray(i) = Temp End If Next j Next i Debug.Print myArray(1) Debug.Print myArray(2) Debug.Print myArray(3) Debug.Print myArray(4) Debug.Print myArray(5) End Sub
Stellen Sie sicher, dass Sie das Direktfenster aktivieren, um dort die Ergebnisse anzuzeigen.
Ein Array sortieren (ZA)
Ebenso können Sie nach ZA sortieren. In der vorherigen Methode haben wir das erste Element mit dem nächsten Element in der Sequenz verglichen, aber in diesem Code müssen Sie das Gegenteil tun. Wenn also das zweite Element (nächstes in der Reihenfolge) größer als das erste ist, werden sie vom Code vertauscht.
Option Base 1 Sub vba_sort_array_z_to_a() Dim myArray() As Variant ReDim myArray(5) Dim i As Integer Dim j As Integer Dim Temp As String myArray(1) = "A" myArray(2) = "B" myArray(3) = "C" myArray(4) = "D" myArray(5) = "E" 'sorting array from A to Z For i = LBound(myArray) To UBound(myArray) For j = i + 1 To UBound(myArray) If UCase(myArray(i)) < UCase(myArray(j)) Then Temp = myArray(j) myArray(j) = myArray(i) myArray(i) = Temp End If Next j Next i Debug.Print myArray(1) Debug.Print myArray(2) Debug.Print myArray(3) Debug.Print myArray(4) Debug.Print myArray(5) End Sub