【VBA】コレクションの使い方【配列との違い・引数・メソッドまで解説します】

コレクションは複数の値を扱うことができ、特徴として主に「コレクション内の要素に名前を付けられる」というクラスになります。

 

よく話題に挙がるのが、コレクションと同様に複数の値を扱うことができる『配列との違い』についてです。

そして、無理やり配列を使おうとして、処理数が増えている人が結構います。

なので、本記事では「コレクションと配列の違い」から「コレクションの使い方」まで解説していきます。

 

コレクションのイメージがしやすくなるように、一度下のコードに目を通しておいてください。

 

では、さっそくコレクションについて解説していきます。

スポンサーリンク



はじめ:配列との違い

下はコレクションにあって配列にはない決定的な特徴になります。

・インデックスの代わりに「Key」から値を引っ張ってこれる。

・必要に応じて、既存の要素の前後に要素を追加できる。

・「Key」で要素に名前を付けられるので、コードの可読性が上がる。

 

配列というのは宣言時以外、どこにどの値が入っているか分からなかったりします。

だから、FOR文やIF文を使って、要素を調べるという人も結構います。

ですが、そういう場合はインデックスの代わりに『Key』を設定できるコレクションを使えば、スムーズに事が運ぶかもしれません。

加えて、『Key』で値に名前を付けることができることから、コードの可読性の向上に繋げることができます。

 

また、既存の配列のインデックスの並びが不規則だったりして、不満が生じることがあります。

そういうときも、コレクションなら多くの要素を追加している状態でも、インデックスで指定した要素の前後に要素を入れることができたりします。

 

このように配列よりも柔軟な操作ができるコレクションは実務で結構役に立ったりします。

 

コレクションの使い方

まずは、実際のコードの説明に入る前に主に使う「Addメソッド」の引数について説明します。

コレクションのAddメソッドの引数は下の通りです。

引数 説明
Item コレクションに追加する要素を指定する
Key インデックスの代わりに使用できる文字列を指定する
Before コレクション内にある特定のデータの前に要素を追加する
After コレクション内にある特定のデータの後に要素を追加する

 

また、コレクションのAddメソッド以外で使うのはRemoveメソッドになります。

メソッド 説明
Remove コレクション内の指定したデータを削除する

※「Itemメソッド」というのもありますが、あまり使わないし、引数のItemとゴッチャになりそうなので省略しています。

 

では、以降、実際に上の引数を使って確かめていこうと思います。

追加する要素にKeyを設定する

まず、コレクションの特徴であるインデックスの代わりに「Key」を指定するを解説していきます。

※上のコードは6行目~10行目は「With」ステートメントで省略ができます。

 

上のコードでは6行目~10行目では「Item」で要素を指定し、それらの要素に「Key」も指定しています。

そして、12行目で上で指定したKeyを使ってコレクション内の要素を使っています。

ポイントコレクションの要素にKeyを指定しない場合はインデックスは”1”から始まります。

※「コレクション名.Item(1)」で始めに追加した要素が呼び出せます。

 

コレクションのように「Key」を指定しない配列が同じ事をしようとすれば、わざわざ目的の値までFor文とIF文を使って中身を確認していかなければならないのです。

コレクション内にある要素の前後に要素を追加する

つぎに既存のコレクション内の特定の要素の前後に要素を追加するという内容を解説していきます。

下のコードはインデックス「2」の前に要素を追加しています。

6 , 7行目:「one(1)」「three(2)」をコレクションに追加する。

10行目:現時点のインデックス”2”の要素を確認している。もちろん、表示されるのは「three」。

13行目:インデックス”2”の前に「two」を追加している。

16行目:要素追加後のインデックス”2”の要素を確認している。ここで表示されるのは「two」。

結果コレクション内は「one(1)」「three(2)」「one(1)」「two(2)」「three(3)」

 

配列で”既存の要素の前後に要素を追加する”をしようとすると、配列を作り直し,FOR文を使ったりする必要があります。

 

コレクションの要素を削除する

下は『Removeメソッド』を使って、インデックス「2」の要素を削除するというコードになっています。

 

6 , 7行目:「one(1)」「two(2)」をコレクションに追加する。

9行目:インデックス”2”に値が入っているかの確認をしている。

12行目:Removeメソッドを使って、インデックス”2”を削除している。

15行目:12行目で削除したインデックス”2”を使おうとしている。※結果、エラーになる。

 

このようにコレクションではインデックスを指定して要素を削除することも容易にできます。

スポンサーリンク

コメント