【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の代わりにもなりますが、使えるメソッドが少なかったり、処理が遅くなるなどのデメリットもありますので、用途によって使い分けることをオススメします。

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

Excel VBAを最短で習得したい方へ

元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」

このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta2_vba2

非常識な結果を出す卒業生多数!

エンジニアキャリア戦略

人気記事セレクション

3000名以上来場の人気セミナーが開催決定

18歳で時給6000円だった侍エンジニア塾代表の木内より、『プログラミングで人生を変える』ための学習方法をお教えます。

0からプログラミングを習得し、フリーランスエンジニアになる方法プログラミング学習の効率を劇的に上げる学習メソッドを解説しますので、奮ってご参加ください。

  • 日付:4/20(土),4/27(土)
  • 時間:14:00〜17:35終了予定
  • 場所:当社 道玄坂オフィス
  • 住所:〒150-0043 東京都渋谷区道玄坂2丁目11-1 Gスクエア渋谷道玄坂 4F *Googleマップでは「東京都渋谷区道玄坂2丁目11-1」で検索してください。近隣にスクエア渋谷という別のビルがあるためご留意ください。
  • 参加費:無料
  • URL:https://seminar.sejuku.net/
詳しくは下の画像をクリックして弊社セミナー内容をご確認ください。

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

長野 透

長野 透

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