Sortieren der Elemente eines Arrays und einer Arrayliste in VBA
In VBA oder in jeder Programmiersprache ist die Notwendigkeit des Computers, Werte zu speichern, die für die Codeausführung von entscheidender Bedeutung sind. Eine gute Möglichkeit, dies zu tun, ist die Verwendung von Arrays.
Arrays sind Objekte, die Informationen speichern können. Sie sind bei der Computerprogrammierung unerlässlich, da sie dem Programmierer die Möglichkeit geben, Daten zu speichern, die im letzten Teil der Codeausführung benötigt wurden.
In VBA können wir Array()
und Arraylist()
für unsere Array-Anforderungen verwenden. Ersteres ist schneller in der Ausführungszeit und letzteres verspricht Flexibilität. Die erstere hat eine feste Länge, während die letztere Länge variabel ist.
Der folgende Codeblock zeigt, wie man ein Array()
und eine Arraylist()
erstellt und verwendet.
Statisches Array()
erstellen und verwenden:
Sub StatArrayDemo()
Dim namesArr (1 to 4) as String
namesArr(1) = "Glen"
namesArr(2) = "Jose"
namesArr(3) = "Katrina"
namesArr(4) = "Myla"
Debug.print namesArr(3)
End Sub
StatArrayDemo
Ausgabe:
Katrina
Dynamisches Array()
erstellen und verwenden:
Sub DynaArrayDemo()
Dim namesArr as Variant
namesArr = Array("Glen", "Jose", "Katrina", "Myla")
Debug.print namesArr(0)
End Sub
DynaArrayDemo
-Ausgabe:
Glen
Erstellen und verwenden Sie Arraylist()
Um Arraylist()
in VBA zu verwenden, müssen wir die Bibliothek aktivieren, in der sich Arraylist()
befindet.
Um dies zu tun:
-
Excel-Datei öffnen.
-
Öffnen Sie auf der Registerkarte
Entwickler
denVisual Basic
-Editor. -
Klicken Sie in der Symbolleiste
Tools
aufReferenzen
. -
Aktivieren Sie das Kontrollkästchen
mscorlib.dll
.
Sie sind jetzt fertig.
Im folgenden Beispiel wurde das Objekt Arraylist
mit dem Namen ArrayValues
deklariert und initialisiert, dann wurden Werte hinzugefügt.
Sub ArrayListDemo()
Dim ArrayValues As ArrayList
'Create a new Arraylist Object
'Adding Values to ArrayValues Arraylist
ArrayValues. Add("Glen")
ArrayValues. Add("Jose")
ArrayValues. Add("Kartina")
ArrayValues. Add("Myla")
Debug.Print (ArrayValues(1))
End Sub
ArrayListDemo
Ausgabe:
Jose
Sortieren von Array()
in VBA
Der folgende Codeblock sortiert die in das Unterprogramm eingegebenen Werte entweder in numerischer Reihenfolge oder in alphabetischer Reihenfolge.
Die Unterroutine ArraySort
akzeptiert drei Parameter. vArray
, wobei die unsortierten Werte während inLow
die untere Grenze von vArray
und inHi
die obere Grenze von vArray
ist. Der ArraySort
wurde von zwei Test-Subroutinen NumberTest
und LetterTest
getestet.
Public Sub ArraySort(vArray As Variant, inLow As Long, inHi As Long)
Dim arr1 As Variant
Dim tempO As Variant
Dim tempL As Long
Dim tempH As Long
tempL = inLow
tempH = inHi
arr1 = vArray((inLow + inHi) \ 2)
While (tempL <= tempH)
While (vArray(tempL) < arr1 And tempL < inHi)
tempL = tempL + 1
Wend
While (arr1 < vArray(tempH) And tempH > inLow)
tempH = tempH - 1
Wend
If (tempL <= tempH) Then
tempO = vArray(tempL)
vArray(tempL) = vArray(tempH)
vArray(tempH) = tempO
tempL = tempL + 1
tempH = tempH - 1
End If
Wend
If (inLow < tempH) Then ArraySort vArray, inLow, tempH
If (tempL < inHi) Then ArraySort vArray, tempL, inHi
End Sub
Sub NumberTest()
Dim myArr As Variant
myArr = Array(5, 7, 3, 8, 5, 3, 4, 1)
Call ArraySort(myArr, 0, UBound(myArr))
Dim i As Integer
For i = LBound(myArr) To UBound(myArr)
Debug.Print (myArr(i))
Next i
End Sub
Sub LetterTest()
Dim myArr As Variant
myArr = Array("A", "T", "O", "D", "B", "Q", "M", "L")
Call ArraySort(myArr, 0, UBound(myArr))
Dim i As Integer
For i = LBound(myArr) To UBound(myArr)
Debug.Print (myArr(i))
Next i
End Sub
NumberTest
-Ausgabe:
1
3
3
4
5
5
7
8
LetterTest
-Ausgabe:
A
B
D
L
M
O
Q
T
Sortieren von Arraylist()
in VBA
Bei Arraylist
ist es einfacher, da das Arraylist
-Objekt mit der Sort
-Methode kommt. Wenn Sie also Dinge in einem Array sortieren müssen, ist es viel besser, Arraylist
zu verwenden.
Der folgende Codeblock zeigt, wie Werte in Arraylist
sortiert werden. Die Sort
-Funktion von Arraylist
kann Werte und Buchstaben sortieren.
Public Sub ArraylistSortLetters()
Dim myArr As Arraylist
Set myArr = New Arraylist
myArr.Add ("A")
myArr.Add ("T")
myArr.Add ("O")
myArr.Add ("D")
myArr.Add ("B")
myArr.Add ("Q")
myArr.Add ("M")
myArr.Add ("L")
myArr.Sort
Dim i As Integer
For i = 0 To myArr.Count - 1
Debug.Print (myArr(i))
Next i
End Sub
ArraylistSortLetters
Ausgabe:
A
B
D
L
M
O
Q
T
Public Sub ArraylistSortNumbers()
Dim myArr As Arraylist
Set myArr = New Arraylist
myArr.Add (5)
myArr.Add (8)
myArr.Add (2)
myArr.Add (8)
myArr.Add (4)
myArr.Add (7)
myArr.Add (1)
myArr.Add (7)
myArr.Sort
Dim i As Integer
For i = 0 To myArr.Count - 1
Debug.Print (myArr(i))
Next i
End Sub
ArraylistSortNumbers
Ausgabe:
1
2
4
5
7
7
8
8
Die beiden Codeblöcke darüber ArraylistSortLetters
und ArraylistSortNumbers
sortieren die Elemente vom niedrigsten zum höchsten.
Wenn wir das Array vom höchsten zum niedrigsten sortieren möchten, können wir das Array vom niedrigsten zum höchsten sortieren und dann die Methode Reverse
verwenden, um umzuschalten.
Der folgende Codeblock demonstriert die Sortierung vom höchsten zum niedrigsten Wert mit der Reverse
-Methode.
Public Sub SortInHighestToLowest()
Dim myArr As Arraylist
Set myArr = New Arraylist
myArr.Add (5)
myArr.Add (8)
myArr.Add (2)
myArr.Add (8)
myArr.Add (4)
myArr.Add (7)
myArr.Add (1)
myArr.Add (7)
myArr.Sort
myArr.Reverse
Dim i As Integer
For i = 0 To myArr.Count - 1
Debug.Print (myArr(i))
Next i
End Sub
SortInHighestToLowest
Ausgabe:
8
8
7
7
5
4
2
1