ExcelマクロVBA入門
第58回.コレクションとは

Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
最終更新日:2018-01-27

第58回.コレクションとは


同種のオブジェクトを複数まとめたものを「コレクション」と呼びます


コレクションもオブジェクトの一種です。


例えば、

Workbookオブジェクトが複数まとまったものは「Workbooksコレクション」

Worksheetオブジェクトが複数まとまったものは「Worksheetsコレクション」

オブジェクト名が単数形であるのに対し、

コレクション名が複数形であることがポイントです。

多くの場合、○○○オブジェクトに対応する、○○○sコレクションがあります。
(全てのオブジェクトにコレクションがあるわけではありません)

従って、Excelには、多くのコレクションがあります。


コレクションの中から、から単一オブジェクトを指定する場合

コレクション.Item(インデックス)

または、

コレクション.Item(オブジェクト名)

なのですが、

普通は、.Itemを省略して、

コレクション(インデックス)

または、

コレクション("オブジェクト名")

のように書きます。

具体的には、

Workbooks("Book1.xls")
Worksheets("Sheet1")
Worksheets(1)

等になります。

この使い方は、既に何度も出てきたものですので、問題は無いでしょう。



セルであるRangeオブジェクトのコレクションは

セルであるRangeオブジェクトのコレクションは、どうなっているのでしょうか。

少なくとも、Rangesコレクションというものはありません。

Rangeコレクションという言い方も、普通はしません。

言わば、セル(単一セル)のコレクションが、Rangeオブジェクトなのです。

そもそも、単一セルを表すオブジェクトが存在していないのです。

Cellsが複数形で、Cellオブジェクトのコレクションのような感じを受けるにもかかわらず、

Cellオブジェクトなんて存在していない事が、余計に混乱を招いているのかもしれません。

Rangeオブジェクトだけが特別なのです。


Rangeは、オブジェクトでもあり、コレクションでもあります



コレクションの要素数

コレクション.Count

これで、コレクション内のオブジェクト数を取得できます。

つまり、

コレクション(1)
コレクション(2)
・・・
コレクション(コレクション.Count)

これらが、単一のオブジェクトであり、その集合がコレクションとなっています。

ワークシートの場合なら、

例えば、「Sheet1」「Sheet2」「Sheet3」の3つのシートがある場合

Worksheets.Count → 3
Worksheets(1) → Sheet1
Worksheets(2) → Sheet2
Worksheets(3) → Sheet3

と言う事になります。



Collectionオブジェクト

Collectionオブジェクトとは、1つのオブジェクトとして参照できる複数の要素の集合です。
Collectionオブジェクを利用すると、互いに関連付けられた複数の要素を 1 つのオブジェクトとして参照できます。
つまり、
文字列、数値、オブジェクトを要素とした独自のコレクション(オブジェクト)を作成できるという事です。

コレクションのメンバは、同じデータ型を共有する必要はありません。
つまり、データ型の違うデータを1つのコレクションに入れられるという事になります。

Collection オブジェクトに、メンバを追加するときにはAddメソッドを使います。
Addメソッドの引数
 引数Itemの値は重複可能ですが、
 引数Keyには重複する値を指定できずエラーとなります。
 引数Key省略可能ですが、その場合は当然キーによる要素へのアクセスは出来なくなります。

メンバを削除するときにはRemoveメソッドを使います。

作成したCollectionオブジェクトの使い方は、前述のコレクションと同様になります。

使用例

Dim cols As New Collection
'または、以下のように、DimとSetを使う
'Dim cols As Collection
'Set cols = New Collection

With cols
  .Add Item:="アイテム1", Key:="key1"
  .Add Item:="アイテム2", Key:="key2"
  .Add Item:="アイテム3", Key:="key3"
  .Remove ("key3")
  .Add Item:="アイテム4", Key:="key4"
End With

MsgBox cols.Count '3と表示
MsgBox cols(1) 'アイテム1と表示
MsgBox cols.Item(2) 'アイテム2と表示
MsgBox cols.Item(3) 'アイテム4と表示
MsgBox cols("key4") 'アイテム4と表示





同じテーマ「マクロVBA入門」の記事

Worksheetオブジェクト
Rangeオブジェクト
Applicationのプロパティ
コレクションとは
コレクション処理(For Each)
エラー処理(On Error)
「On Error Go To」と「Exit Sub」
「On Error Resume Next」とErrオブジェクト
ブックを開く(Open)
ブックを閉じる・保存(Close,Save,SaveAs)
シートの挿入、名前の変更(Add,Name)

新着記事NEW ・・・新着記事一覧を見る

クラスとCallByNameとポリモーフィズム(多態性)|VBA技術解説(4月6日)
VBAでのタイマー処理(SetTimer,OnTime)|VBA技術解説(4月3日)
クラスとイベントとマルチプロセス並列処理|VBA技術解説(4月2日)
エクセルの日付と時刻のまとめ|エクセル関数超技(3月6日)
Excelシートの複雑な計算式を解析するVBA|VBAサンプル集(2月18日)
VBAクラスの作り方:独自Rangeっぽいものを作ってみた|VBA技術解説(2月16日)
VBAクラスの作り方:列名のプロパティを自動作成する|VBA技術解説(2月14日)
VBAクラスの作り方:列名の入力支援と列移動対応|VBA技術解説(2月11日)
クラスを使って他ブックのイベントを補足する|VBA技術解説(2月6日)
Excelアドインの作成と登録について|VBA技術解説(2月3日)

アクセスランキング ・・・ ランキング一覧を見る

1.ひらがな⇔カタカナの変換|エクセル基本操作
2.最終行の取得(End,Rows.Count)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.RangeとCellsの使い方|ExcelマクロVBA入門
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • コレクションとは

    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。






    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

    本文下部へ