コレクション

中級VBA

コレクションの使い方

 コレクションとはオブジェクトの集合体を扱うためのもので、コレクション自体もオブジェクトです。

コレクションはいわばオブジェクトの配列のようなものです。
配列と違う点は、キーと呼ばれるインデックス番号の代わりの名前も付けられるという点です。また配列よりも容易に要素(オブジェクト)の追加や削除ができます。

宣言のしかた

コレクションを使いたいときは以下のように宣言します。

  Dim MyItems As Collection
  Set MyItems = New Collection

または、一行で以下のようにも宣言できます。
  Dim MyItems As New Collection

このように宣言します。

要素の追加(アイテム と キー)

.Add で要素とキーを追加していきます。

  MyItems.Add Item :=”ノコギリ” , key := “ノコ”
  MyItems.Add Item :=”カンナ”
  MyItems.Add Item :=”トンカチ” , key :=”ハンマー”
  MyItems.Add Item :=”ペンチ”
  MyItems.Add Item :=”ドライバー”
  MyItems.Add Item :=”ドライバー”

キーは無くてもOKですが、重複してはいけません。
値の重複はOKです。

要素は追加された順にコレクションの1番目から割り当てられます。
(配列のように0番目にはありません。)

要素数(カウント)

.Count で要素数を取得できます。

  MyItems.Count

要素の削除

要素の削除は、.Remove を使います。インデックス番号指定か、キーで指定します。

  MyItems.Remove 2
  MyItems.Remove (“ノコ”)

Remove Count を用いることで、最後の要素を削除できます。

  MyItems.Remove MyItems.Count  

値の取り出し

  MyItems(“ノコ”) => ”ノコギリ”
  MyItems(2)   => ”カンナ”

  ※要素は、MyItems(1)から始まります。

また、For Eachで各値を取りだすことができます。
取り出す時の変数(以下ではitem)は、オブジェクト型とバリアント型が使えますが、慣れないうちはバリアント型が無難です。

    Dim item As Variant
    
    For Each item In MyItems
      Debug.Print item
    Next

重複しないリスト

 あるリストに対して、重複しないリストが欲しいというケースもあります。
 コレクションでは重複しないリストを作ることができます。その際、キーが重複するとエラーとなる性質を使用するため、エラー処理を無視して次へ進むようにします。
 それには、On Error Resume Next を使います。

 以下のコードはシートのA列を、B列をキーとしてコレクションに読み込んでいます。
キー重複した場合は2回目以降が無視されてコレクションに格納されます。

Sub CollectionTest()
    Dim MyItems As New Collection
    Dim i As Long
    
    'エラーがあっても止まらずに次へ処理を進める指令
    On Error Resume Next
    
    For i = 1 To 10
        MyItems.Add item:=Cells(i, "A"), Key:=Cells(i, "B")
    Next i
        
    For i = 1 To MyItems.Count
        Debug.Print MyItems(i)
    Next i
    
End Sub

シートの値が、このような場合は、下のような結果になります。

1
4
5
6
7
8
9
10
タイトルとURLをコピーしました