在 VBA 中對陣列和 Arraylist 的元素進行排序

Glen Alfaro 2023年1月30日
  1. 在 VBA 中對 Array() 進行排序
  2. 在 VBA 中對 Arraylist() 進行排序
在 VBA 中對陣列和 Arraylist 的元素進行排序

在 VBA 或任何程式語言中,計算機需要儲存對程式碼執行至關重要的值。一個很好的方法是利用陣列。

陣列是具有儲存資訊能力的物件。它們在計算機程式設計中必不可少,因為它們使程式設計師可以選擇儲存程式碼執行後期所需的資料。

在 VBA 中,我們可以利用 Array()Arraylist() 來滿足我們的陣列需求。前者的執行時間更快,而後者保證了靈活性。前者是固定長度,而後者是可變長度。

下面的程式碼塊將演示如何建立和使用 Array()Arraylist()

建立和使用靜態 Array()

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 輸出:

Katrina

建立和使用動態 Array()

Sub DynaArrayDemo()

Dim namesArr as Variant

namesArr = Array("Glen", "Jose", "Katrina", "Myla")

Debug.print namesArr(0)
End Sub

DynaArrayDemo 輸出:

Glen

建立和使用 Arraylist()

要在 VBA 中使用 Arraylist(),我們需要啟用 Arraylist() 所在的庫。

去做這個:

  • 開啟 Excel 檔案。
  • 開發人員選項卡中,開啟 Visual Basic 編輯器。
  • 工具工具欄中,單擊參考
  • 勾選 mscorlib.dll 核取方塊。

現在一切就緒。

在下面的示例中,宣告並初始化名為 ArrayValuesArraylist 物件,然後新增值。

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 輸出:

Jose

在 VBA 中對 Array() 進行排序

下面的程式碼塊將按數字順序或字母順序對子程式中輸入的值進行排序。

ArraySort 子程式接受三個引數。vArray 其中未排序的值,而 inLow 將是 vArray 的下限,而 inHivArray 的上限。ArraySort 由兩個測試子程式 NumberTestLetterTest 測試。

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 輸出:

1 
3 
3 
4 
5 
5 
7 
8 

LetterTest 輸出:

A
B
D
L
M
O
Q
T

在 VBA 中對 Arraylist() 進行排序

對於 Arraylist,它更容易,因為 Arraylist 物件帶有 Sort 方法。因此,如果你需要對陣列中的內容進行排序,最好使用 Arraylist

下面的程式碼塊將演示如何對 Arraylist 中的值進行排序。ArraylistSort 功能可以對值和字母進行排序。

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 輸出:

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 輸出:

1 
2 
4 
5 
7 
7 
8 
8 

ArraylistSortLettersArraylistSortNumbers 上面的兩個程式碼塊將元素從低到高排序。

如果我們想將陣列從高到低排序,我們可以將陣列從低到高排序,然後使用 Reverse 方法進行切換。

下面的程式碼塊將演示使用 Reverse 方法從高到低排序。

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 輸出:

8 
8 
7 
7 
5 
4 
2 
1 

相關文章 - VBA Array