オブジェクトって何?
今回は、Excelで必要なオブジェクトの考え方について説明しましょう。
ただし、よく言われるオブジェクト指向についてはここでは触れませんので、そちらの方を勉強したい方は書籍等で勉強して下さい。
さて、はじめに言っておきます。
「オブジェクトっていう考え方は全然難しくない!」です。
みなさんの中には、「オブジェクトって難しいよ」とか聞いた事がある方もいるかもしれません。
確かにオブジェクト指向に真剣に取り組むのは難しいのかもしれません。 しかし、これは従来の手続き指向のプログラマーにとってそうなのであって、むしろプログラムに詳しくない人にとっては簡単なのではないかと(私は)思っています。 (こんな事を書くと君は何も解っていない!といわれそうですが)特に、Excelでのオブジェクトというのはとても簡単なんです。
簡単な事を分かりにくそうな言葉で言い換えているだけの事なので、心配はいりません。
ということで、本題に入りましょう。
オブジェクトだのオブジェクト指向だのというと、なにやら難しそうに感じますが、実際のところはみなさんが普段無意識に使っている考え方に過ぎません。まあ、そういう無意識に行っている事ほど、簡単に説明するのが難しいのですが。
オブジェクトとは、簡単にいうと「もの」のことです。例えば、人、本、車などの「もの」をオブジェクトと呼びます。「もの」は別に実体がないといけないというわけではありません。 所詮はコンピュータ上の架空の世界で扱うものですから、日付など実体のないものでもオブジェクトと考える事ができます。
また、オブジェクトに関連のある言葉には、以下のような言葉もあります。
ざっと紹介しますので、オブジェクトと合わせて覚えておきましょう。
オブジェクト | もの |
コレクション | 同種のオブジェクトが複数集まったもの |
プロパティ | オブジェクトの属性、性質 |
メソッド | オブジェクトの動作 |
イベント | オブジェクトに対して何かが起きた時に、何が起きたかをオブジェクトに伝える手段 |
どうです、解りますか?
わからないですよね!
では、具体的な例を見てみましょう。
これは時計ですね。ということで、これがオブジェクトです。わかりますか?
この「時計というもの」を、時計オブジェクトと呼びましょうというだけの事です。 さらに、この時計に使われている針も、「針というもの」を針オブジェクトと呼びましょうということでオブジェクトと言えます。同じように、文字盤やベルも足もみんなオブジェクトです。
ここで、一つ覚えておきたいのは時計には針(足、文字盤、ベル)が使われている(針は時計に含まれている)ということです。この場合、時計と針の関係を親子関係といいます。ここでは、時計は針の親(Parent)であるといいます。
では、コレクションとは?
時計には、時分秒のそれぞれ用に計3本の針がありますよね。 これを針コレクションといいます。針というオブジェクト(目的や概観は違ってもみんな針)をまとめてコレクションといいます。 簡単ですよね。
では、プロパティは?
時計の色は?形は?名前は?用途は? ってな感じで、これらの属性や性質なんかをプロパティといいます。 この時計オブジェクトの用途プロパティは目覚まし時計だ! 名前プロパティは、”起こし太郎”だ! っちゅう感じですね。
では、メソッドは?
時計に対してやりたいこと、やる事をできるようにする方法、手段をメソッドといいます。
時間を5時15分にセットする為には、時間セットメソッド(時間設定軸をまわす)があり、アラームをとめるには、 アラームストップメソッド(止めるためのボタンを押す)ってな感じです。
最後に、イベントは?
アラームを止められた、電池がきれた、0分になったってな風に時計に起こることをイベントといいます。
別に完璧に理解できていなくても全然問題ないですよ。 全く解らないというのは困りますが、何となくわかったようなわからんようなという位で十分です。
どんどん進んでいく内に、その何となくがはっきりとに変わってくるでしょう。
では、もう少し。
今度はExcelを例にして見てみましょう。
よく御存じのExcelのファイル(Excelではブックといいます)を開いたところですね。
このブックは、Workbookオブジェクトです。
さらにこのブック内のワークシートはWorksheetオブジェクトです。
このワークシートですが、ブック内に複数持つ事が可能です。 そのため、WorksheetのコレクションWorksheetsがあります。 さらに、ワークシート内には多数のセルがあります。 しかし、Excelではセル一つ一つをオブジェクトとはしていません。 見た目にはセルオブジェクトというのがあると分かりやすいのですがね。
では、セルをあらわすようなオブジェクトはないのか?
いいえ、Rangeオブジェクトというものが用意されています。 これは、セル一つではなくセルの範囲(A1:C6等)をあらわすオブジェクトです。 冒頭でもいいましたが、別に見たままの「もの」をオブジェクトにしなくてもいいんですね。 実はセルよりもRangeの方がいろいろと好都合なのでこういう具合に少し工夫されているわけです。 (この辺は少し難しいかもしれません。私もかなり前ですが、C++で簡単な表計算プログラムを作った時にセルオブジェクトを作ってしまいかなり悩みました)
ちなみに、図のウィンドウもWindowオブジェクトです。
続いて、プロパティ、メソッド、イベントについてざっと見てみましょう。 (細かい内容は、そのうち紹介する事になるでしょう)
Workbookには、Nameプロパティやsavedプロパティがあります。 また、OpenメソッドやSaveAsメソッド、OpenイベントやNewSheetイベントがあります。もちろん他にもたくさんありますよ。
同じく、Worksheetオブジェクトにも、Nameなどたくさんのプロパティやメソッド、イベントがあります。
ついでにVBAでこれらがどう表現されるのか少しだけ紹介します。
プロパティ:
・ブック1の一つ目のシートの名前を”住所録”に変えます。
Workbooks("ブック1").Worksheets(1).Name = "住所録"
・Sheet2のA1セルの値を表示します。
Msgbox "値は" & Workbooks("ブック1").Worksheets("Sheets2").Range("A1").Value
メソッド:
・ブック1を保存します。
Workbooks("ブック1").Save
イベント:
・ブックが開かれた時に”こんにちは”と表示します。
そのブックのThisWorkBookに次のマクロを記述しておくと、実現できます。
Private Sub Workbook_Open()
Msgbox "こんにちは"
End Sub
最後に、今回学んだ事に役立つヘルプをお教えします。
Visual Basic Editorの方のOfficeアシスタントで、「Excelオブジェクトの階層構造」と入力し、結果から同項目を選んで下さい。 Excelのオブジェクトの構造が表示されます。
Excelはたくさんのオブジェクトの組み合わせで成り立っているのがよくわかると思います。
この一番親のApplicationとは、何を隠そうExcel自身です。
以前書いた「マクロでExcelを自由自在に操作できる」というのは、これらのApplicationを含めたオブジェクトをそれらのプロパティ、メソッド、イベントを使ってVBAでプログラミングするということなんですね。
では、今回はこの辺で。
何となく分かってきましたか?
変数や制御文(If文など)まだ色々と覚えた方が良い事もありますが、実はこれまで説明した事で結構プログラミングできます (マクロ記録の結果を見て下さい。ほとんどがオブジェクトに関する文でしょう!)。
そこで、次回はオブジェクトの操作を中心にマクロを作ってみましょうか。
その中で少しずつ新しい事を紹介していこうと思います。
1999.4.4