はじめに

VBAで複数のデータを扱う場合、よく使われるのは配列ですが、VBAには配列よりも便利に利用できるCollectionオブジェクトが利用できます

Collectionオブジェクトはキーと値で1セットとなるデータ形式を持ちます。キーは省略可能で、省略した場合は配列と同様でインデックス番号で値を扱います。

Collectionに似た仕組みを持つDictionaryオブジェクトがありますが、ここではCollectionオブジェクトについて説明します。

なお、Dictionaryオブジェクトについての詳細は「VBAのDictionaryの使い方(全メソッドとプロパティ網羅)」をご参照ください。

配列とCollectionの違い

配列とCollectionは以下に違いがあります。

違い 配列 Collection
メソッド有無 無し Add(データ追加)、Remove(データ削除)、Item(データ取得)
プロパティ有無 無し Count(データ数取得)
サイズの変更方法 ReDimまたはRedim Preserveで変更する。 Addメソッドで自動増加、Removeメソッドで自動減少する。
要素の削除 不可 Removeメソッドで削除可能。
キーアクセス 不可 可能
速度 速い やや遅め

Collection のメソッドとプロパティ

メソッド

Sub Add(Item, [Key], [Before], [After]) コレクションに新しい要素を追加します。
Item:設定必須です。追加するデータを指定します。
Key:省略可能です。キー文字列を指定します。省略した場合はインデックスをKeyとして扱うことになります。
Before、After:省略可能です。Collectionのどの位置の前か後ろかに追加するかを指定します。AfterとBeforeを同時に指定はできません。
Sub Remove(Index Or Key) 指定したインデックスまたはキーの要素を削除します。
Function Item(Index Or Key) 指定したインデックスまたはキーの要素を取得します。「Item」は省略可能でcol(1) は col.Item(1) と同じ意味になります。

プロパティ

Function Count() As Long コレクション内の要素数を返します。

各メソッドとプロパティの使い方

Collectionの変数はNew Collectionで作成します。Collectionはクラスとしてデータを保持するためNewを使って初期化が必要です。

Collectionの全てのメソッドとプロパティを使ったサンプルです。

Addメソッドなど、メソッドのためCallを使って明示することも、Callを使わずに書くこともどちらも可能です。

Callを使ってメソッドであることを明示する場合のサンプル

Callを使わない場合のサンプル