VBAにおけるCollectionオブジェクトを使用することで文字列、数値、オブジェクトを要素とした独自のコレクション(オブジェクト)を作成できます。
独自のCollectionを使うことで、生成したオブジェクト変数に要素を格納したり、取り出したりできます。わかりやすく言えば配列変数のように扱えます。
私は業務で規定フォームへのデータ転記をよく行うので、Collectionオブジェクトは重宝しています。
Collectionとは?
そもそも、Collectionとは何か?オブジェクトが複数まとまったものです。
ではオブジェクトとは何か?VBAで操作を行う「モノ」のことを言います。
オブジェクトについての記事はこちら↓
オブジェクトとコレクション
既存のオブジェクトにはコレクションが存在します。コレクションの中の1つの要素、つまり単一のオブジェクトを指定する際は、Workbooks(”○○.xlsx”)やWorksheets(”シート名”)、Worksheets(1)などと記述します。
Collectionオブジェクト(サンプルコード)
さて、改めてCollectionオブジェクトは先述のWorkbooksやWorksheetsなどの既存のオブジェクトではなく、独自のオブジェクトを作成できるものです。
Sub ColTest()
Dim cols As Collection
Set cols = New Collection
Dim i As Long
'コレクションにアイテムとキーを登録
cols.Add Item:="A", Key:="1"
cols.Add Item:="B", Key:="2"
cols.Add Item:="C", Key:="3"
'アイテムの呼び出し
MsgBox cols(1)
MsgBox cols.Item(2)
MsgBox cols("3")
'アイテムの出力1
For i = 1 To cols.Count
Cells(i, 1) = cols(i)
Next i
i = 1
Dim colvar As Variant
'アイテムの出力2
For Each colvar In cols
Cells(i, 2) = colvar
i = i + 1
Next
End Sub
Collectionの初期化
Dim cols As Collection
Set cols = New Collection
Dim コレクション名 As Collection
Set コレクション名 = New Collection
上記にように、宣言します。以下のように記述することもできます。
Dim コレクション名 as New Collection
メソッド:アイテム(Item)とキー(Key)の登録
Collectionオブジェクトの基本的な使い方として、Addメソッドを使って、ItemとKeyを登録します。
'コレクションにアイテムとキーを登録
cols.Add Item:="A", Key:="1"
cols.Add Item:="B", Key:="2"
cols.Add Item:="C", Key:="3"
Keyの重複
また、Keyは省略可能です。また、Keyに重複する値を登録するとエラーになります。
Removeメソッド
Collectionの要素を削除するときはRemoveメソッドを使います。インデックス番号で指定または、キーを設定していればキー名を指定して削除もできます。
コレクション名.Remove(インデックス番号あるいはキー名)
要素の取得(出力)
「インデックス番号を指定」あるいは「キー名を指定」して要素を取得します。
'アイテムの呼び出し
MsgBox cols(1)’インデックス番号
MsgBox cols.Item(2)'アイテムのインデックス番号
MsgBox cols("3")'キー名の指定
これについては、身近なものとしてWorksheetsコレクションと一緒ですよね。Worksheets(1)、Worksheets(“シート名”)でシートを指定します。
全要素の取得
For Nextステートメント、For EachNextステートメントを使って全要素を取得できます。
'アイテムの出力1
For i = 1 To cols.Count
Cells(i, 1) = cols(i)
Next i
'アイテムの出力2
i = 1
Dim colvar As Variant
For Each colvar In cols
Cells(i, 2) = colvar
i = i + 1
Next
Collectionを使った重複削除
Keyに重複する値を登録できないことを利用して、重複削除(ユニーク化)にCollectionを使います。
赤字が重複の製品コードです。下記のコードでB列にユニークな製品コードを出力します。
Sub ColTest2()
Dim cols As Collection
Set cols = New Collection
Dim i As Long
On Error Resume Next
For i = 2 To 18
cols.Add Cells(i, 1), Cells(i, 1)
Next
On Error GoTo 0
For i = 1 To cols.Count
Cells(i + 1, 2) = cols(i)
Next
End Sub
まとめ
1、Collectionオブジェクトを使用することで、独自のコレクション(オブジェクト)を作成できる。
2、Addメソッド、Keyメソッド、ItemメソッドでCollectionオブジェクトに要素を登録していく。
3、Keyは省略可能であり、重複の値を登録することができない。
4、全要素を取得するときはForNext、ForEachを使う。
コメント