Excel VBAで知っておきたいオブジェクトモデル
Workbookオブジェクトに関する内容を書いていて、ふと、肝心な話を書いていなかったな!ってことに気が付いたのですw
それは何ぞや!?というと、それこそが、そ!オブジェクトモデルについてです!
■オブジェクトモデル
Excelとか、VBAに限った話ではないのですが、プログラム言語の多くは、オブジェクトが階層構造で作られています
こういう階層のことをアプリケーションの「オブジェクトモデル」というんですねーw
(プログラムを勉強したことがある人や、オブジェクト指向プログラミングなんて言葉を聞いたことがある人にとっては、既知の話ですが)
ExcelなどのOffice VBAでも当然のことながら、この階層構造で作られた「オブジェクトモデル」なのです!
・オブジェクトとオブジェクトモデル
言葉に注意ですが、「オブジェクト」と「オブジェクトモデル」は別のものです!
- 「オブジェクト」は、(例えば「Workbookを定義した」)『クラスから作成(インスタンス化)したモノ』を指します(「Workbookオブジェクト」と呼ぶ)
- 「オブジェクトモデル」は、(上手く言えませんが)アプリケーションにおける『階層構造』がどのように作られているのかを示す『概念図』のことを指します
ますます判りにくくなりましたけどwww
ま、「階層構造」≒「オブジェクトモデル」で問題なし!(ホンマか!?w)
・クラス
ちなみに、突然「クラス」って言葉も出てきましたが、言葉としては「クラス」と「オブジェクト」が同じように使われることもありますが、
先にも書いた通り『「クラス」から作成されるのが「オブジェクト」』です
(多少語弊はありますが)「Workbookクラス」は(基本的に)1つですが、「Workbookオブジェクト」は複数作れます
で「クラス」ってのは、メソッドやプロパティなどを定義した設計図(テンプレートとも言われる)のようなものです
「クラス」が平面(設計図)で、「オブジェクト」が立体(製造物)というイメージです(?)
■VBAの概念図
なんてものは、Microsoftにでも聞いてくださいw
というわけで、ここでは、ざっくりとExcelでのVBAの階層構造について触れようと思います
Excelの中(メンバー)には、ApplicationやWorkbooks、Range、Fontなどのクラスがたくさん用意(定義)されています
このクラスがどのように階層化されているのか、よく使うクラスをよく使う階層でサラッと紹介しておきますw
・階層
「Excel.Application」が「Excel」のトップレベル!
- 最初の階層として、【アプリケーション】があります
- その下に【ファイル】を表す「Workbooks (Workbook)」
- 更にその下に、「Workbook」単位で以下があります
- 【シート】を表す「Sheets」
- 【スタイル】を表す「Styles (Style)」
- 【名前定義】を表す「Names (Name)」
※「Sheets」は「Worksheets (Worksheet)」と「Charts (Chart))」で構成
更に、その下に・・・と結構続きますので、大変ですねw
・構造図(簡易)
文章だと判りずらいので、Tree階層で構造図を表現してみますw
(※主にコレクションを中心に記載しています)
EXCEL └─Application └─Workbooks (★) ├─Names (☆) ├─Sheets │ ├─Charts │ │ ├─Axes │ │ ├─ChartGroups │ │ ├─DataTable │ │ └─Shapes │ └─Worksheets (★) │ ├─Comments (☆) │ ├─Names (☆) │ └─Range (★) │ ├─Areas │ ├─Borders (★) │ ├─Columns (☆) │ ├─Hyperlinks (☆) │ └─Rows (☆) └─Styles (☆)
「Charts」や「Worksheets」の下層は個人の見解ですw
記載していないのも多数あります(書ききれないw)
まぁ、クラスの構造図とはこんな風に『階層化で表現できる!』
・・とそんな風に判ってもらえれば良いかと思いまーす(かなり適当w)
※上図の星マークは以下のレベルです
★:勉強した、☆:勉強したい
少しずつですが、随時、記事にしていこうと思います!
■最後に
このオブジェクトモデルの概念を知っているのと知っていないとでは、VBAプログラミングを行う上で影響が出てくると思っています(たぶん)
VBエディタでプログラミングをしていると、「Excel.」と『.』(ドット、ピリオド)を書くと、配下のオブジェクトなどが自動で出てきてくれます
(これは参照設定が必要な場合もありますw)
それらやクラスのメンバーを見ていると、至る所の階層に同じクラスが出現するので、正確な階層構造を知るのは非常に困難です(Microsoftに聞いてー!)
そのため、個人によっては、異なる階層構造を主張する人もいると思いますし、わしが見つけられなかっただけで、正式なオブジェクトモデル図があるかも知れません!w
ここの記載内容が、『個人の見解であること』を十分にご理解ください
ではでは