VBAのCollectionオブジェクトを使いこなそう!

VBAのCollectionオブジェクトは、多数のデータを効率的に管理するための便利なオブジェクトです。Collectionオブジェクトを使うことで、膨大な量のアイテムをグループ化し、一括で処理することができます。
ExcelやAccessなどのMicrosoft Office製品において、Collectionオブジェクトを活用することで、データの管理や操作をよりスムーズに行うことができます。
この記事では、Collectionオブジェクトの基礎知識から応用まで、詳しく解説していきます。

Collectionオブジェクトとは何か?

VBAのCollectionオブジェクトは、複数のアイテムを保持し、簡単にアクセスできるようにするためのオブジェクトです。
配列や辞書型オブジェクトとは異なり、Collectionオブジェクトは順序付けされておらず、各アイテムにキー値を割り当ててアクセスすることができます。
このため、Collectionオブジェクトは順序付けされていないデータを管理するのに適しています。

辞書型オブジェクトは、キーと値のペアを使用してデータを格納し、キーによって値を検索することができるオブジェクトです。
キーは一意であり、重複することはできません。
辞書型オブジェクトは、配列やCollectionオブジェクトと同様に、複数の要素を格納できますが、順序が保証されないため、要素をインデックスでアクセスすることはできません。

辞書型オブジェクトは、Microsoft Scripting Runtimeライブラリに含まれており、VBAで使用することができます。
主に、大量のデータを扱う際に、辞書型オブジェクトを使用することで処理速度が向上する場合があります。
しかし、配列やCollectionオブジェクトよりも多少複雑であるため、使い方を覚えるまでに時間がかかることがあります。

Collectionオブジェクトは、オブジェクトを格納できる点が配列とは異なります。
これにより、Collectionオブジェクトは、異なる種類のオブジェクトを含めることができます。
例えば、Collectionオブジェクトには、文字列、数値、配列、そして他のオブジェクト(例えば、WorksheetオブジェクトやRangeオブジェクトなど)を含めることができます。

また、Collectionオブジェクトは、配列よりもより高度な操作が可能であることが特徴です。
配列は、データの格納や取得に特化した構造ですが、Collectionオブジェクトは、追加、削除、キー値の変更など、複数のアイテムに対して操作を行うことができます。

以下、簡単なサンプルコードを用い使い方を説明します。

このコードは、Collectionオブジェクトを使用して3つの要素を追加し、要素数を取得して、指定されたインデックスの要素を取得する方法を示しています。

最初に、Collectionオブジェクトを宣言し、Addメソッドを使用して、要素 “りんご”、 “バナナ”、 “オレンジ”を順番に追加しています。

次に、Countプロパティを使用して、Collection内の要素数を取得しています。これは、3という値を返します。

その後、()を使用して、インデックス番号を指定して、Collection内の特定の要素を取得する方法を示しています。例えば、item = col(2)とすることで、インデックス番号が2の要素である “バナナ”が取得されます。

最後に、Forループを使用して、Collection内の全要素を順番に取得し、Removeメソッドを使用して、インデックス番号が2の要素を削除しています。これにより、最終的には、Collection内の要素は “りんご”と “オレンジ”の2つだけになります。

このように、Collectionオブジェクトを使用することで、複数の要素を効率的に管理でき、要素の追加、削除、取得などを簡単に行うことができます。

Collectionオブジェクトを使うメリットとは?

繰り返しになりますが、。Collectionオブジェクトは、配列と比べて、異なる種類のデータを管理することができる点が優れています。一方で、配列は同じデータ型の要素しか管理できません。

例えば以下のような例を考えてみましょう。

この場合、myArray(2)には数値が代入されています。
しかし、配列は同じデータ型の要素しか管理できないため、このような異なるデータ型の要素を管理することができません。
一方で、Collectionオブジェクトを使用すれば、異なる種類のデータを同じコレクションに格納することができます。

このように、Collectionオブジェクトを使用すれば、異なるデータ型の要素を同じコレクションに格納することができます。

Collectionオブジェクトは、Addメソッドを使って新しい要素を追加することができます。
また、Removeメソッドを使って、指定した要素を削除することもできます。
これらのメソッドは非常に簡単に使用でき、コレクション内の要素を追加、削除、または並び替えることができます。

例えば、以下のようなコードを考えてみましょう。

このコードでは、最初に配列を定義し、配列に要素を追加しています。
ただし、配列から要素を削除する場合は、要素を空の文字列に設定する必要があります。

次に、Collectionオブジェクトを定義し、Addメソッドを使用して要素を追加します。
この場合、要素を削除する場合は、Removeメソッドを使用することができます。この場合、削除する要素のインデックスを指定する必要があります。

この例から、Collectionオブジェクトは、配列と比較して、要素を簡単に追加、削除、または並び替えることができることがわかります。
また、異なる種類のデータを管理することができるため、より柔軟なデータ管理が可能です。

おそらく、「配列」はプログラミングにおいて非常に基本的なデータ構造であり、ほとんどのプログラミング言語で使用されているため、広く知られていることがCollectionオブジェクトより有名な理由でしょう。

VBAでCollectionオブジェクトを使いこなす方法

まずは、Collectionオブジェクトの使い方のおさらいです。

  1. Collectionオブジェクトの宣言 まず、Collectionオブジェクトを宣言します。これは、コレクションに追加される要素を格納するためのものです。次のように宣言できます。
  1. Addメソッドを使用して要素を追加する 次に、Addメソッドを使用して要素を追加します。例えば、以下のように追加することができます。
  1. For Eachループを使用してコレクション内の要素を処理する For Eachループを使用すると、コレクション内のすべての要素を順番に処理することができます。以下は、For Eachループを使用してCollection内のすべての要素を取得する例です。
  1. Countプロパティを使用してコレクション内の要素数を取得する Countプロパティを使用すると、コレクション内の要素数を取得することができます。以下は、Countプロパティを使用してCollection内の要素数を取得する例です。
  1. Removeメソッドを使用して要素を削除する Removeメソッドを使用すると、指定した要素をコレクションから削除することができます。以下は、Removeメソッドを使用してCollection内の2番目の要素を削除する例です。

これらの方法を組み合わせることで、VBAでCollectionオブジェクトを効果的に使用することができます。

以下、サンプルコードです。
Collectionオブジェクトを使用して、社員の名前と年齢を管理するサンプルコード

このコードは、以下のような処理を行います。

  1. Collectionオブジェクトを宣言し、employeeListという名前を付けます。
  2. Addメソッドを使用して、社員名と年齢のペアを順番にコレクションに追加します。
  3. For Eachループを使用して、コレクション内のすべての要素を順番に取得し、社員名と年齢を表示します。
  4. employeeListコレクションから、社員名が”山田”の社員の年齢を変更します。
  5. 再度、For Eachループを使用して、変更後のコレクション内のすべての要素を順番に取得し、社員名と年齢を表示します。
  6. Removeメソッドを使用して、社員名が”鈴木”の社員をコレクションから削除します。
  7. 再び、For Eachループを使用して、削除後のコレクション内のすべての要素を順番に取得し、社員名と年齢を表示します。

  1. Subルーチン「CollectionSample2」を定義する。
  2. Collectionオブジェクト「products」を宣言し、新しいCollectionオブジェクトを作成する。
  3. Addメソッドを使って、商品情報を追加する。商品名と価格を含む配列と、商品コードの文字列が追加される。
  4. 商品情報を表示するための変数「code」を宣言する。
  5. For Eachループを使って、全商品コードに対して処理を繰り返す。
  6. 商品コードに対応する商品情報を取得する。
  7. 商品コード、商品名、価格を表示する。
  8. 商品情報を削除するための商品コードを指定する。
  9. For Eachループを使って、全商品コードに対して処理を繰り返す。
  10. 商品コードに対応する商品情報を取得する。
  11. 商品コード、商品名、価格を表示する。

コメント