コレクションは複数の値を扱うことができ、特徴として主に「コレクション内の要素に名前を付けられる」というクラスになります。
よく話題に挙がるのが、コレクションと同様に複数の値を扱うことができる『配列との違い』についてです。
そして、無理やり配列を使おうとして、処理数が増えている人が結構います。
なので、本記事では「コレクションと配列の違い」から「コレクションの使い方」まで解説していきます。
コレクションのイメージがしやすくなるように、一度下のコードに目を通しておいてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub Sample() Dim UserInfo As Collection Set UserInfo = New Collection '---インスタンス化 'コレクションに要素+Keyを追加 UserInfo.Add Item:="田中", Key:="LastName" UserInfo.Add Item:="太郎", Key:="FirstName" UserInfo.Add Item:=20, Key:="Age" UserInfo.Add Item:=170, Key:="Height" UserInfo.Add Item:=60, Key:="Weight" 'Keyを使って、コレクション内の要素を呼び出す MsgBox Users.Item("FirstName") & "の身長は" & Users.Item("Height") & "cmです。" End Sub |
では、さっそくコレクションについて解説していきます。
はじめ:配列との違い
下はコレクションにあって配列にはない決定的な特徴になります。
・インデックスの代わりに「Key」から値を引っ張ってこれる。
・必要に応じて、既存の要素の前後に要素を追加できる。
・「Key」で要素に名前を付けられるので、コードの可読性が上がる。
配列というのは宣言時以外、どこにどの値が入っているか分からなかったりします。
だから、FOR文やIF文を使って、要素を調べるという人も結構います。
ですが、そういう場合はインデックスの代わりに『Key』を設定できるコレクションを使えば、スムーズに事が運ぶかもしれません。
加えて、『Key』で値に名前を付けることができることから、コードの可読性の向上に繋げることができます。
また、既存の配列のインデックスの並びが不規則だったりして、不満が生じることがあります。
そういうときも、コレクションなら多くの要素を追加している状態でも、インデックスで指定した要素の前後に要素を入れることができたりします。
このように配列よりも柔軟な操作ができるコレクションは実務で結構役に立ったりします。
コレクションの使い方
まずは、実際のコードの説明に入る前に主に使う「Addメソッド」の引数について説明します。
コレクションのAddメソッドの引数は下の通りです。
引数 | 説明 |
Item | コレクションに追加する要素を指定する |
Key | インデックスの代わりに使用できる文字列を指定する |
Before | コレクション内にある特定のデータの前に要素を追加する |
After | コレクション内にある特定のデータの後に要素を追加する |
また、コレクションのAddメソッド以外で使うのはRemoveメソッドになります。
メソッド | 説明 |
Remove | コレクション内の指定したデータを削除する |
※「Itemメソッド」というのもありますが、あまり使わないし、引数のItemとゴッチャになりそうなので省略しています。
では、以降、実際に上の引数を使って確かめていこうと思います。
追加する要素にKeyを設定する
まず、コレクションの特徴である”インデックスの代わりに「Key」を指定する”を解説していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub CollectionSample1() Dim Users As Collection Set Users = New Collection '---インスタンス化 Users.Add Item:="田中", Key:="LastName" Users.Add Item:="太郎", Key:="FirstName" Users.Add Item:=20, Key:="Age" Users.Add Item:=170, Key:="Height" Users.Add Item:=60, Key:="Weight" MsgBox Users.Item("FirstName") & "の身長は" & Users.Item("Height") & "cmです。" End Sub |
※上のコードは6行目~10行目は「With」ステートメントで省略ができます。
上のコードでは6行目~10行目では「Item」で要素を指定し、それらの要素に「Key」も指定しています。
そして、12行目で上で指定したKeyを使ってコレクション内の要素を使っています。
ポイントコレクションの要素にKeyを指定しない場合はインデックスは”1”から始まります。
※「コレクション名.Item(1)」で始めに追加した要素が呼び出せます。
コレクションのように「Key」を指定しない配列が同じ事をしようとすれば、わざわざ目的の値までFor文とIF文を使って中身を確認していかなければならないのです。
コレクション内にある要素の前後に要素を追加する
つぎに”既存のコレクション内の特定の要素の前後に要素を追加する”という内容を解説していきます。
下のコードはインデックス「2」の前に要素を追加しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub CollectionSample2() Dim UserInfo As Collection Set UserInfo = New Collection UserInfo.Add Item:="one" UserInfo.Add Item:="three" '要素追加前のインデックス"2"の値 MsgBox "要素追加前は" & UserInfo.Item(2) '---"three"が表示される 'コレクションのインデックス"2(three)"の前に"two"を追加する UserInfo.Add Item:="two", before:=2 '要素追加後のインデックス"2"の値 MsgBox "要素追加後は" & UserInfo.Item(2) '---"two"が表示される End Sub |
・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」の要素を削除する”というコードになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub CollectionSample3() Dim Number As Collection Set Number = New Collection Number.Add Item:="one" Number.Add Item:="two" MsgBox Number.Item(2) '---"two"が表示される 'インデックス"2"の要素を削除 Number.Remove (2) 'インデックス"2"の要素がないので、ここでエラーになる MsgBox Number.Item(2) End Sub |
・6 , 7行目:「one(1)」「two(2)」をコレクションに追加する。
・9行目:インデックス”2”に値が入っているかの確認をしている。
・12行目:Removeメソッドを使って、インデックス”2”を削除している。
・15行目:12行目で削除したインデックス”2”を使おうとしている。※結果、エラーになる。
このようにコレクションではインデックスを指定して要素を削除することも容易にできます。
1位 | 2位 | 3位 |
---|---|---|
Excel VBA 脱初心者のための集中講座 | パーフェクトExcel VBA | ExcelVBA 実戦のための技術 |
初心者~中級者 | 中級者 | 初心者~中級者 |
【初心者が手に取るべき参考書】 ・「書籍+動画」で圧倒的に理解しやすい入門書になっている。 ・丁寧で詳しい解説でボリューム感がある。 | 【より深い理解をしたい方にお勧めな参考書】 ・テーマに対して丁寧な解説・適度な深さで解説されている。 ・幅広くテーマを扱っていることから、基礎知識をあらかた網羅できる。 | 【入門書と一緒に買うべき参考書】 ・1つ1つのテーマを経験豊富なエンジニア視点で解説してくれている。 ・実践的で効果的なコードの書き方が理解できる。 |
【読んでみた一言】 正直、入門書はコレ一冊でいいかも。あとは中級者用の参考書に進むべし。 | 【読んでみた一言】 深く書かれているが、少々専門的に書かれていることから、読む前に数冊の入門書を読破したほうが良い。 | 【読んでみた一言】 基礎知識を持っている人が次のレベルに達するきっかけを与えてくれる参考書である。 |
スポンサーリンク