Hoe sorteer ik een array in vba?
Om een array in VBA te sorteren, moet je een code schrijven waarin je het eerste element van de array kunt matchen met het volgende en deze kunt omwisselen als het eerste element eerder komt. Hiervoor heb je een FOR (For Next)-lus en de UCASE-functie nodig.
In deze tutorial zullen we de twee manieren (AZ en ZA) zien om de elementen van een array te sorteren.
Sorteer een array (AZ)
In de onderstaande code heb je een array met vijf elementen, en deze elementen hebben waarden variërend van E tot A, en nu moeten we in AZ-volgorde sorteren.
Stappen om een array te sorteren
- Eerst moet u een geneste lus schrijven met For Next, waarbij u de boven- en ondergrenzen van de array gebruikt.
- Daarna moet u in deze lus de VBA IF-instructie gebruiken om de twee elementen te vergelijken.
- Als het eerste element vóór het volgende element komt, moet u ze vanaf daar omwisselen door hun waarden in variabelen op te slaan.
- Gebruik aan het einde het trefwoord ‘Volgende’ om de lus te voltooien.
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
Zorg ervoor dat u het venster Direct activeert om daar de resultaten te zien.
Sorteer een array (ZA)
Op dezelfde manier kunt u sorteren op ZA. In de vorige methode vergeleken we het eerste element met het volgende element in de reeks, maar in deze code moet je het tegenovergestelde doen. Dus als het tweede element (volgende in volgorde) groter is dan het eerste, zal de code ze verwisselen.
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