VBA で配列と配列リストの要素を並べ替える
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
チェックボックスにチェックマークを付けます。
これですべての設定が完了しました。
以下の例では、ArrayValues
という名前の Arraylist
オブジェクトが宣言され、初期化されてから、値が追加されました。
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
Ouput:
Jose
VBA で Array()
を並べ替える
以下のコードブロックは、サブルーチンに入力された値を番号順またはアルファベット順に並べ替えます。
ArraySort
サブルーチンは 3つのパラメーターを受け入れます。vArray
ここで、inLow
は vArray
の下限であり、inHi
は vArray
の上限です。ArraySort
は、2つのテストサブルーチン NumberTest
と LetterTest
によってテストされました。
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
で値をソートする方法を示しています。Arraylist
の Sort
関数は、値と文字をソートできます。
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
ArraylistSortLetters
と ArraylistSortNumbers
の上の 2つのコードブロックは、要素を低いものから高いものへと並べ替えます。
配列を最高から最低にソートする場合は、配列を最低から最高にソートしてから、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