はじめに
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を使って初期化が必要です。
1 |
Dim col As New Collection |
Collectionの全てのメソッドとプロパティを使ったサンプルです。
Addメソッドなど、メソッドのためCallを使って明示することも、Callを使わずに書くこともどちらも可能です。
Callを使ってメソッドであることを明示する場合のサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub CollectionSample() '// Collectionオブジェクトの変数 Dim col As New Collection '// ■Addメソッド:データ追加 Call col.Add("りんご", "apple") '// 1番目に追加 Call col.Add("バナナ", , 1) '// 1番目として追加(りんごは2番目になる) Call col.Add("ぶどう", "grape", 2) '// 2番目として追加(バナナ、ぶどう、りんご、の順) '// ■Removeメソッド:データ削除 Call col.Remove(1) Call col.Remove("apple") '// ■Itemメソッド:データ取得 Debug.Print col(1) '// ■Countプロパティ:データ数 Debug.Print col.Count End Sub |
Callを使わない場合のサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub CollectionSample2() '// Collectionオブジェクトの変数 Dim col As New Collection '// ■Addメソッド:データ追加 col.Add "りんご", "apple" '// 1番目に追加 col.Add "バナナ", , 1 '// 1番目として追加(りんごは2番目になる) col.Add "ぶどう", "grape", 2 '// 2番目として追加(バナナ、ぶどう、りんご、の順) '// Countプロパティ:データ数 Debug.Print col.Count '// ■Removeメソッド:データ削除 col.Remove 1 col.Remove "apple" '// ■Itemメソッド:データ取得 Debug.Print col(1) End Sub |