【VBA入門】Collectionオブジェクトの使い方

Collection(コレクション)って使ってますか?Collectionはキーと項目のセットを要素として格納することができます。

しかも、それぞれの要素でデータ型が違っていても問題がないので便利です。

この記事では、Collection(コレクション)について

  • Collectionオブジェクトとは
  • Collectionの使い方


といった基本的な内容から、

  • For Each文で要素一覧を取得する方法
  • 要素の存在チェックをする方法
  • Removeで要素を削除する方法

など具体的な使い方についても解説していきます。

今回はCollection(コレクション)について、使い方をわかりやすく解説します。

Collectionオブジェクトとは

Collectionオブジェクトとは項目(item)とキー(key)をセットで格納するオブジェクトのことです。Collectionオブジェクトの要素には数値、文字列からオブジェクトまで格納することができます。

また、要素ごとに数値や文字列などデータ型が異なる場合でも一つのコレクションとしてまとめておくことができます。

ただし、キーを重複させることはできません。同じように項目とキーをセットで格納できるオブジェクトとしてDictionaryオブジェクトがあります。

Collectionオブジェクトと違って、Dictionaryオブジェクトは異なるデータ型を要素として格納することはできません。

またCollectionオブジェクトはDictionaryオブジェクトの代わりとして使用することもできますが、用意されているメソッドが少なかったり、一般的に処理速度がDictionaryオブジェクトに比べて若干遅いなどのデメリットもあります。

Collectionの使い方

それではCollectionオブジェクトの使い方についてみていきましょう!

プロパティ、メソッド一覧

これから使用するCollectionオブジェクトのプロパティとメソッドについて表にまとめました。

プロパティ:

プロパティ説明
Count格納された要素の数

メソッド:

メソッド説明
Add item, key, index1, index2キーに項目を関連付けて追加
index1またはindex2でインデックス番号の指定可
Remove key|indexキーと項目のペアを削除
Item(key|index)キーまたはインデックス番号に関連付けられた項目

宣言する方法

Collectionオブジェクトは以下のように宣言します。

また、以下のように宣言することもできます。

Addで初期化、追加する方法

Collectionオブジェクトを初期化、または要素を追加するにはAddメソッドを使用します。Addメソッドの第1引数に項目、第2引数にキー、第3引数、第4引数にはインデックス番号を指定します。

第3引数で指定したインデックス番号の前に要素を追加することになります。第4引数で指定したインデックス番号の後に要素を追加することになります。

第2引数以降は省略可能です。キーの指定を省略した場合はインデックス番号を使って項目を参照することになります。

それではサンプルコードで確認していきましょう。

このサンプルコードでは、CollectionオブジェクトmyColを宣言し、Addメソッドを使って要素を追加しています。

項目にはString型とInteger型のように異なるデータ型を格納できていることがわかります。

Countで要素数を調べる方法

Collectionオブジェクトの要素数を調べるにはCountプロパティを使用します。

サンプルコードで確認していきましょう。

実行結果:
collection_count

keyでitemを取得する方法

Collectionオブジェクトのitemを取得するにはItemメソッドを使用します。keyを使って指定する方法とインデックス番号を使って指定する方法があります。

なお、Itemの記述は省略することもできます。

サンプルコードで確認していきましょう。

実行結果:
collection_item

このサンプルコードでは、CollectionオブジェクトmyColの要素の項目をItemメソッドを使って出力表示しています。

Itemメソッドの引数にkeyを指定した場合とインデックス番号を指定した場合、またItemメソッドの記述を省略した場合で同じ結果を出力表示しています。

For Each文で要素一覧を取得する方法

Collectionオブジェクトの要素をすべて取得する場合はFor Each文を使うと便利です。

For Each文ではInでCollectionオブジェクトの項目を取得することができます。取得した項目はバリアント型になります。

サンプルコードで確認していきましょう。

実行結果:
collection_ForEach

このサンプルコードでは、CollectionオブジェクトmyColの要素をFor Each文を使って1つずつ取得しています。

要素の存在チェックをする方法

Collectionオブジェクトの要素を削除する場合などは、対象の要素が存在するかチェックしてから削除する方がエラーが発生せずにすみます。

VBAではCollectionオブジェクトの要素が存在するかチェックするメソッドは用意されていません。ちなみにVisual BasicではContainsメソッドが用意されているのですが、VBAでは用意されていません。

ですので、自分で関数を作成する必要があります。要素の存在をチェックするサンプルコードをご紹介します。

実行結果:
collection_isExists

このサンプルコードでは、Collectionオブジェクトで対象の要素が存在するかチェックする関数としてisExistsを宣言、定義しています。

isExistsは引数にCollectionオブジェクトと項目を指定し、その項目が存在すればTrueを存在しなければFalseを返します。

“Tokyo”は項目として存在していますので、Trueを返しています。

Removeで要素を削除する方法

Collectionオブジェクトの要素を削除するには、Removeメソッドを使用します。

Removeメソッドは引数で対象のキーもしくはインデックス番号を指定します。サンプルコードで確認していきましょう。

実行結果:
collection_remove

このサンプルコードでは、CollectionオブジェクトmyColの要素をRemoveメソッドを使って削除しています。出力結果を確認すると項目”Tokyo”が削除されていることがわかります。

なお、Removeメソッドを削除する前に前章でご紹介した自作の関数isExistsを使って削除する項目が存在するかチェックしています。

まとめ

ここではCollectionオブジェクトについて説明しました。

Collectionはキーと項目をセットで扱うことができて、さらにデータ型が異なってもまとめて扱うことができるので便利です。

キーと項目をセットで扱えるのでDictionaryの代わりにもなりますが、使えるメソッドが少なかったり、処理が遅くなるなどのデメリットもありますので、用途によって使い分けることをオススメします。

使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説