VBAでプログラムを作成する際に、必ず必要とされるものにオブジェクトがあります。オブジェクトは、「物」という意味ですが、VBAではExcelを構成しているすべての要素を表します。例えば、以下のようなものが代表的なオブジェクトになりますが、ほんの一部です。
オブジェクト名 | Excelでの構成名 |
---|---|
Workbook | ワークブック |
Worksheet | ワークシート |
Range | セル、またはセル範囲 |
Interior | セルの内部 |
Charts | グラフ |
Autofilter | オートフィルタ |
Excelのオブジェクトは階層構造をとっています。Workbookオブジェクトの下に、Worksheetオブジェクトがあり、さらにその下にRangeオブジェクトが位置しています。なぜなら、ワークブックは、ワークシートで成り立っていますし、ワークシートはセルや罫線などで構成されているからです。
VBAコードを記述する際に、いきなりRangeオブジェクトに対する処理を実行できませんので、より上位の階層から、下の階層のオブジェクトへと記述していくことで、特定のオブジェクトに対する処理が可能となります。
記述例) ブック名が"顧客情報.xls"の中のSheet1という名前のシートのセルA1。
Workbooks("顧客情報.xls").Worksheets("Sheet1").Range("A1")
オブジェクトはExcelを構成するパーツですが、オブジェクトによっては同じものが存在しているものがあります。
例えば、Worksheetオブジェクトは1つだけであるとは限りません。1つのブック内に複数のワークシートが何枚も作れるからです。このような複数存在するオブジェクトは、まとめて管理や操作をすることができます。同じオブジェクトを集めて1つのオブジェクトにしたものをコレクションと呼びます。コレクションは、「集合体」などと訳されますので、単体のオブジェクト名に「s」を付けた複数形の名前となります。
ワークシートを例にすると、「Worksheet」が単体のオブジェクト名で、「Worksheets」がコレクションオブジェクトとなります。コレクション自身もオブジェクトとなり得ますから、コレクションオブジェクトと呼ばれる場合もあります。
Rangeオブジェクトから直接コードを記述することも可能ですが、その場合には現在アクティブになっているWorkbookオブジェクトやWorksheetオブジェクトを参照していることが前提となります。また、オブジェクトの階層構造の最上位にはアプリケーション自身を表すApplicationオブジェクトが存在します。そのアプリケーションに属するすべてのオブジェクトが、Applicationオブジェクト以下の階層に位置します。ただ、Excel内でVBAを記述しているのであれば、明示的にApplicationオブジェクトはExcelとなっていますので、通常は最上位であるApplicationオブジェクトは省略して記述します。