パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)
オブジェクト、コレクション、メソッド、アクセッサ
前回、EXCELのオブジェクトで、簡単にオブジェクト、プロパティ、メソッドといったことについて説明しました。
前回はかなりはしょって説明しましたので、今回はもう少しつっこんでみます。
まあ、「オブジェクトとは何ぞや、ということを正確に知らんでも、とりあえずVBAコードは書ける」し、
「書いているうちに、自然とオブジェクト等の理解も深まる」ものなので、わしにはとりあえず必要ない、
という人は読みとばして下さい。
1 WorkbookオブジェクトとWorkboosコレクションオブジェクト
今、”Hello.xls”、”Book1.xls”、”Main.xls” の3つのBOOK(Workbook)を開いたとします。
それぞれ個々のBOOKは、Workbookオブジェクトです。Workbooksコレクションオブジェクトは
何かというと、その3つとも全てを指すものです。
コレクションオブジェクトは、全部のBOOKを閉じたい場合など、全てのオブジェクトに同じ操作をしたい
場合に使うと便利です。
2 オブジェクトを返すメソッド(アクセッサ)
さて、個々のBOOKを指すには
Workbooks("Hello.xls") とか Workbooks("Book1.xls")
のように記述しました。
このWorkbooks( )は何なのでしょうか。
実は、これはWorkbooksメソッドなのです。このメソッドはオブジェクトを返します。
マニュアル通りに書くと
Workbooksメソッドを使って、Workbooks("Hello.xls") と記述すると、
Workbooks("Hello.xls") は”Hello.xls”を指すWorkbookオブジェクトを表すことになるのです。
ということです。
なんのことか、チンプンカンプンやという人もいるかも知れませんが、さしあたって正確に理解する必要も
ないと思いますので、よみ飛ばして下さい。いくつかVBAでコードを書いてるうちに、少しづつわかるように
なると思います。メソッドがオブジェクトを返すというのが、ピンと来ないかもしれませんが、そういう仕様
だとわりきって下さい。
また、ただ単に
Workbooks
と記述すると、Workbooksコレクションオブジェクトを表します。
このようにオブジェクトを返すメソッドをアクセッサと呼びます。
もう少し例をあげておきましょう。
* Buttonオブジェクト、Buttonsコレクションオブジェクト
Buttonオブジェクトはコマンドボタンを表すオブジェクトですが、Buttonオブジェクトを表すには、
Buttonsメソッドで以下のように記述します。
Butoons(1) ------>最初のButtonオブジェクト
Buttons(2) −−>2番めのButtonオブジェクト
Butoons −−−>Buttonsコレクションオブジェクト
なお、余談ですが、VIsual Basicはオブジェクトを参照する時は、オブジェクト名を直接記述します。
例えばコマンドボタンは、デフォルトでは作成順に、command1、command2、command3という名前に
なります。
3 Rangeオブジェクト
EXCELでは、セルを表すのはRangeオブジェクトですが、
Rangeオブジェクトは正確に言うと、単体のセルだけを表すオブジェクトではなく
「セル、複数の範囲のセル、行、列を表すオブジェクト」です。
A1という単体のセルだけを表すオブジェクトはEXCELにありません。
Rangeオブジェクト、すなわちセル、行、列を表すには以下のようなメソッドがあります。
Rangeメソッド、Cellsメソッド、Columnsメソッド、Rowsメソッド
Range,Cells,Columns,Rows
というのは非常によく使うと思いますが、実はこれも
Rangeオブジェクトを返すメソッドだったのです。
ここらへんのメソッドの具体的な使用例は、セル関連基本マクロ、セル関連基本マクロその2に
ありますので、参照して下さい。
4 オブジェクトを返すプロパティ
ここまでで、オブジェクトを返すメソッドについてだいたい分かったと思います。
さて、EXCELにはオブジェクトを返すプロパティがあります。
こう言うと、一般にプロパティとは、オブジェクトの特性を設定するものという頭がありますから、
ええっ、と思う人もいるでしょう。
でも、あるんだから仕方ない。
例えば、アクティブセルを指すActivecell というのはアクテイブセル(だからRangeオブジェクト)
を返すプロパティです。
Activesheet はシート系のオブジェクト(Workseetオブジェクト、Moduleオブジェクト)を返すプロパティです。
Application
はApplicationオブジェクト(EXCEL本体をさすオブジェクト)を返すプロパティです。
とりあえず、オブジェクトを返すプロパティもあるということを覚えて置いて下さい。これもアクセッサです。
まあ、覚えたからといって、VBAコードの記述が劇的に上達するわけではありませんが。
EXCEL関連の書籍で時々、これらのタームがぐちゃぐちゃとでてきて、こんがらがったという経験は
ありませんか。そんな時に参考になるかと思います。
余談。上に書きましたが、VBの場合、オブジェクトを参照するのに、オブジェクトの参照名をそのまま
記述すればよいので、ある意味混乱は少ないと思います。