HOME > 即効テクニック > Excel VBA > その他関連のテクニック > VBA最初の一歩(その4)オブジェクト

VBA最初の一歩(その4)オブジェクト|Excel VBA

その他関連のテクニック

VBA最初の一歩(その4)オブジェクト

( - )

■オブジェクトとは・・・■

エクセルVBAの世界だけに限って言えば、エクセルそのもの、ワークブック、ワークシート、セル、各種ボタン類、 オートシェープ、グラフ、など具体的な”もの”のことです。ここにあげた例だけで考えてみると、ワークブックはエクセルの中にあり、ワークシートはワークブックの中にあるという階層構造になっていることに注意してください。

現在開いている”ワークブック(MyBook.xls)の中のワークシート(Sheet1)上のセルA1”を階層構造の上からたどれば・・・

(例)Workbooks("MyBook.xls").Worksheets("Sheet1").Range("A1")

となります。WorkbookとWorksheetはそれぞれ英語の複数形のように"s”がついていますが、Workbooksはブックの集まり、Worksheetsはシートの集まり、を表しています。言い換えれば、具体的な”もの(オブジェクト)”の集合体(コレクション)なのです。

例えば、”集合住宅”を考えてみてください。いくつもの部屋があり、部屋番号がつけられています。さらに住人の名前でも他の部屋と区別されるでしょう。各部屋には入り口や、子供部屋だとか書斎だとかキッチンなどの個室があります。この集合住宅の名前は”コーポラスOFFICE”。部屋数は現在7、この中には”エクセル”さんや”ワード”さんがいるとしましょう。

VBA風に子供部屋のありかを記述すれば・・・

Apartments("Office").Rooms("Excel").PrivateRooms("Child")

このように表現するとエクセルさん宅の子供部屋がどこに属しているのかを明示することができます。エクセルさん宅には個室が何部屋かあって、個室の集合体を表すのがPrivateRoomsコレクション。さらに、コーポラスOfficeにある部屋の集合体がRoomsコレクションなのです。

表現を変えてみます。コーポラスオフィスが存在する区画にはいくつもの集合住宅があって、住所の上からは識別番号として”3”が与えられ、Excelさん宅の部屋番号は”7”、子供部屋は入り口から数えて”2”番目の部屋であったとします。

Apartments(3).Rooms(7).PrivateRooms(2)

としても子供部屋を識別することが可能です。
つまり、集合体としてのRoomsコレクションにインデックス番号や住人の名前などを付加することで個々の部屋を識別することができるということなのです。ApartmentオブジェクトはApartmentsコレクションにインデックス、もしくはアパート名を、RoomオブジェクトはRoomsコレクションにインデックス、もしくは住人の名前を与えることで他のアパートや部屋から識別することが可能となるのです。

エクセルの世界に戻りましょう。
上記の(例)が現在開いている3つのブックのうち2番目で、一番目のワークシートを表現するのであれば・・・

    Workbooks(2).Worksheets(1).Range("A1")

となるでしょう。

■オブジェクトの操作■

上記の例でワークシートを一枚追加するという場合・・・

    Workbooks("MyBook.xls").Worksheets.Add

さらに、ブックを追加するのであれば、・・・

    Workbooks.Add

というように、オブジェクトの集合としてのコレクションにブックやシートを加え(Add)ていることが分かります。 今度は既に作成してあるブックを開いてみます。

    Workbooks.Open "XXX.xls"

開いたブック"XXX.xls"を閉じます。

    Workbooks("XXX.xls").Close

Addにせよ、Openにせよ、ブックの集合体への動作であり、Workbooksコレクションに対する操作が行われます。
対して、特定のブックを閉じる行為は、Workbooks("XXX.xls")というように、コレクションに識別のための情報を与えることで閉じるべきブックを特定しているのです。

このように、オブジェクトはオブジェクトの集合体(コレクション)の中でインデックスや名前を与えられることで他とは異なるものとして識別され、特定のオブジェクトが操作可能となるのです。

このことは”ブックAのシート3”のような階層構造のなかでも同じです。
”A”という名前、”3”というインデックスによって、どこに何があるのかを特定することができるのです。