HOME
配列を初期化する方法には主に 2 つの方法があります。Erase ステートメントを使う方法と Array 関数を使う方法です。
配列を初期化する方法には主に 2 つの方法があります。Erase
ステートメントを使う方法と Array
関数を使う方法です。
Erase
ステートメントは、配列のデータ型によって初期化される初期値が以下のとおり異なります。
Dim List(1) As Integer
List(0) = 1
List(1) = 2
Erase List ' 数値配列なので 0 で初期化される
Debug.Print List(0) ' 0
Debug.Print List(1) ' 0
一方、Array
関数での初期化は、要素の値を個別に指定することができます。ただし、動的配列かつ、データ型はバリアント型に限ります。
Dim List() As Variant
List = Array(1, 2)
Debug.Print List(0) ' 1
Debug.Print List(1) ' 2
配列をコピーする場合、コピー先が静的配列か動的配列かによって、コピーする方法が異なります。静的配列の場合、各要素は繰り返し処理によってコピーしなければなりません。
Dim List1(2) As Integer
Dim List2(2) As Integer
List1(0) = 0
List1(1) = 1
List1(2) = 2
Dim i As Integer
For i = LBound(List1) To UBound(List1)
List2(i) = List1(i)
Next i
動的配列の場合、繰り返し処理によるコピーに加えて、代入による設定も可能です。ただし、コピー先の配列は、要素数を定義しない配列に限ります。なお、VBA における配列のコピーは、値渡しのコピーになります。
Dim List1() As Variant
Dim List2() As Variant
ReDim List1(2)
List1(0) = 0
List1(1) = 1
List1(2) = 2
List2 = List1
配列の要素を追加するには ReDim Preserve
ステートメントを使用します。
Dim List() As Variant
List = Array(1, 2, 3)
ReDim Preserve List(3)
List(3) = 4
VBA には配列の要素を削除するための関数はありません。そのため、以下のように手動で削除します。
Dim List() As Variant
List = Array(1, 2, 3, 4, 5)
'' 3番目の要素を削除する
Dim i As Integer
For i = 2 To UBound(List) - 1
List(i) = List(i + 1)
Next i
ReDim Preserve List(UBound(List) - 1)
配列の要素を結合するには、Join
関数を使用します。
Dim List(2) As String
List(0) = "a"
List(1) = "b"
List(2) = "c"
Dim str As String
str = Join(List, "")
要素を結合する際に、区切り文字を設定するには Join
関数の引数に定義します。例えば、以下のコードでは区切り文字に ,
を定義しています。
Dim List(2) As String
List(0) = "a"
List(1) = "b"
List(2) = "c"
Dim str As String
str = Join(List, ",")
配列同士を結合するには、Split
関数と Join
関数を使用します。
Dim List1() As Variant
List1 = Array("1", "2")
Dim List2() As Variant
List2 = Array("3", "4", "5")
Dim List3 As Variant
List3 = Split(Join(List1) & " " & Join(List2))
Join
関数を使用することで配列同士の比較をすることもできます。
Dim List1() As Variant
List1 = Array("1", "2")
Dim List2() As Variant
List2 = Array("3", "4", "5")
If Join(List1) = Join(List2) Then
Debug.Print ("配列は同じです")
Else
Debug.Print ("配列は異なります")
End If
配列の要素の中から条件に一致する要素が含まれているか検索するには Filter
関数を使用します。
Dim List() As Variant
List = Array("北海道", "東京都", "愛知県", "京都府")
Dim Var As Variant
Var = Filter(List, "京", True)
上記の例では、「京」が含まれる文字列(東京都と京都府)が配列として返ります。
VBA には配列の要素を並び替える関数は用意されていません。そのため、以下のように手動で並び替える必要があります。以下は、ソート方法のひとつであるクイックソートです。
Sub QuickSort(ByRef data As Variant, ByVal low As Long, ByVal high As Long)
Dim l As Long
Dim r As Long
l = low
r = high
Dim pivot As Variant
pivot = data((low + high) \ 2)
Dim temp As Variant
Do While (l <= r)
Do While (data(l) < pivot And l < high)
l = l + 1
Loop
Do While (pivot < data(r) And r > low)
r = r - 1
Loop
If (l <= r) Then
temp = data(l)
data(l) = data(r)
data(r) = temp
l = l + 1
r = r - 1
End If
Loop
If (low < r) Then
Call QuickSort(data, low, r)
End If
If (l < high) Then
Call QuickSort(data, l, high)
End If
End Sub
Sub main()
Dim data As Variant
data = Array(7, 2, 6, 3, 9, 1, 8, 0, 5, 4)
Call QuickSort(data, LBound(data), UBound(data))
End Sub