【VBA】コレクション(Collection)とは何かを解説
VBAを書いているとたまに次のようなコレクション(Collection)に出会います。
- Worksheetsコレクション
- Workbooksコレクション
Worksheets(“Sheet1")のような形で、なんとなく使っている方も多いのではないでしょうか。
この記事はなんとなく使っているけど、よく分からないなという人向けになっています。
一度分かってしまえば難しいものではないので、このタイミングで理解してみましょう。
コレクション(Collection)とは何か
コレクションは配列と同じように、複数のデータをまとめたものです。
例えば、Workbooksコレクションは複数のWorkbookオブジェクトをまとめたものです。
配列でも似たようなことができるのですが、コレクションはデータの取り出し方に違いがあります。
Sub Sample1()
'Sheetsコレクション
Dim shts As Sheets
Set shts = Sheets
'①インデックスによる取り出し
Debug.Print shts(1).Name
'②名前(key)による取り出し
Debug.Print shts("Sheet1").Name
End Sub
コレクションはサンプルコードように2つのデータの取り出し方があります。
配列は、①インデックスによる取り出しはできるのですが、②名前(key)による取り出しはできません。
コレクションはインデックスと名前の両方でデータを取り出すことができます。
コレクションは配列と似ていて、インデックスでも名前でもデータを取り出せる、と覚えてください。
余談
ちなみに、コレクションと似たものとして辞書型(Dictionary)もあります。
辞書型は配列と逆で、②名前(key)による取り出しはできるのですが、①インデックスによる取り出しはできまん。
コレクション(Collection)を作る方法
コレクションですが、実は配列と同じように自分で作ることもできます。
Sub Sample()
'空のコレクションを作成
Dim col As Collection
Set col = New Collection
End Sub
VBAでコレクションを使うには、まず、Collectionクラスを使用してコレクションを作成する必要があります。
サンプルコードのようにして、空のコレクションを作成できます。
コレクションに要素を追加する
Sub SampleAdd()
'空のコレクションを作成
Dim col As Collection
Set col = New Collection
'コレクションに要素を追加
col.Add "item", "key"
End Sub
コレクションに要素を追加するにはAddメソッドを使います。
itemはコレクションに追加する要素(中身)です。サンプルコードでは文字列を入れていますが、オブジェクトや配列なども入れることができます。
keyはオブジェクトを識別するための文字列です。keyを省略することもできます。
コレクションの要素数を調べる
Sub SampleCount()
'空のコレクションを作成
Dim col As Collection
Set col = New Collection
'コレクションに要素を追加
col.Add "item", "key"
'コレクションの要素数を調べる
Debug.Print col.Count
End Sub
コレクションの要素数を確認するにはCountプロパティを使います。
コレクションから要素を取り出す
Sub SampleItem()
'空のコレクションを作成
Dim col As Collection
Set col = New Collection
'コレクションに要素を追加
col.Add "Item", "Key"
'コレクションの要素数を調べる
Debug.Print col.Count
'コレクションから要素を取り出す
Debug.Print col.Item("key") 'keyで取り出す
Debug.Print col.Item(1) 'インデックスで取り出す
End Sub
コレクションに要素を取り出すにはItemメソッドを使います。
取り出しは辞書型(Dictionary)のようにkeyで取り出すこともできますし、配列のようにインデックスで取り出すこともできます。
コレクションから要素を削除する
Sub SampleRemove()
'空のコレクションを作成
Dim col As Collection
Set col = New Collection
'コレクションに要素を追加
col.Add "Item", "Key"
'コレクションの要素数を調べる
Debug.Print col.Count
'コレクションから要素を取り出す
Debug.Print col.Item("key") 'keyで取り出す
Debug.Print col.Item(1) 'インデックスで取り出す
'コレクションから要素を削除する
col.Remove "key" 'keyで指定
' col.Remove 1 'インデックスで指定
End Sub
コレクションから要素を削除するにはRemoveメソッドを使います。
削除も辞書型(Dictionary)のようにkeyで指定することもできますし、配列のようにインデックスで指定することもできます。(要素が1つだけのためサンプルコードではインデックス指定をコメントアウトしています)