VBAの動的配列は少し癖があるため使いづらいと思います。動的配列の代替として他言語ではのListクラスが存在しますが、VBAにはCollectionが存在します。今回は、Collenctionの利用方法についてまとめました。
要素追加(Add)
Add関数を使用します。第一引数の追加したい要素を記述します。文字列、数値、オブジェクト等を追加することができます。第二引数は省略可能ですが、文字列型のキーを指定することもできます。
要素取得(item)
item関数を使用します。引数にIndex(1から始まる整数)を指定することで、指定位置の要素を取得することができます。存在しないIndexを指定した場合は、実行時エラーとなります。また、要素追加時にキーを指定している場合は、キーを指定することで、該当する位置の要素を取得することができます。
要素削除(Remove)
Remove関数を使用します。引数にIndex(1から始まる整数)を指定することで、指定位置の要素を削除することができます。削除後はCollectionの要素数が1つ減ります。存在しないIndexを指定した場合は、実行時エラーとなります。また、要素取得同様にキーを指定することで、指定位置の要素を削除することができます。
要素数取得(Count)
Countプロパティを使用します。Collectionの要素数を取得することができます。
ループ処理(For Next, For Each Next)
item(Index)とCountを使用することで、通常のFor Nextでループ処理を行うことができますが、For Each Nextを使用するループ処理も可能です。こちらはサンプルプログラムを確認してください。
サンプルプログラム
Sub sample()
Dim list As New Collection
list.Add "あいうえお"
list.Add 5000
list.Add 10.1
list.Add "たちつてと", "hogekey1" 'Key指定での追加
list.Add "なにぬねの", "hogekey2" 'Key指定での追加
list.Add "はひふへほ"
' 要素の取り出しはIndexかKey指定
Debug.Print CStr(list.item(1)) ' あいうえお
Debug.Print CStr(list.item(3)) ' 10.1
Debug.Print CStr(list.item(4)) ' たちつてと
Debug.Print CStr(list.item("hogekey1")) ' たちつてと
Debug.Print CStr(list.item(6)) ' はひふへほ
' CountとFor Nextを使って全要素を表示
Debug.Print vbCrLf & "CountとFor Nextを使って全要素を表示"
Dim i As Long
For i = 1 To list.Count
Debug.Print CStr(list.item(i))
Next
' 要素の削除はRemoveメソッド。IndexかKey指定する。
list.Remove 3
list.Remove "hogeKey2"
' For Each Nextを使って全要素を表示
Debug.Print vbCrLf & "For Each Nextを使って全要素を表示"
Dim item As Variant
For Each item In list
Debug.Print CStr(item)
Next
End Sub
出力結果
あいうえお
10.1
たちつてと
たちつてと
はひふへほ
CountとFor Nextを使って全要素を表示
あいうえお
5000
10.1
たちつてと
なにぬねの
はひふへほ
For Each Nextを使って全要素を表示
あいうえお
5000
たちつてと
はひふへほ