【EXCEL VBA】Collectionについてまとめて知りたい 基礎編(要素追加/取得/削除、要素数取得、ループ処理)

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
たちつてと
はひふへほ