Sortieren der Elemente eines Arrays und einer Arrayliste in VBA

Glen Alfaro 26 Dezember 2022
  1. Sortieren von Array() in VBA
  2. Sortieren von Arraylist() in VBA
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 den Visual Basic-Editor.
  • Klicken Sie in der Symbolleiste Tools auf Referenzen.
  • 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 

Verwandter Artikel - VBA Array