コレクションの使い方
コレクションとはオブジェクトの集合体を扱うためのもので、コレクション自体もオブジェクトです。
コレクションはいわばオブジェクトの配列のようなものです。
配列と違う点は、キーと呼ばれるインデックス番号の代わりの名前も付けられるという点です。また配列よりも容易に要素(オブジェクト)の追加や削除ができます。
宣言のしかた
コレクションを使いたいときは以下のように宣言します。
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