ここまで、プログラムの実行結果を MsgBox()で確認していました。
でも、そろそろ EXCEL のワークシートに出してもいいかなぁと思います。
そこで今回は、VBA から EXECELワークシートをいじるのに欠かせない 「オブジェクト」 について勉強してみます。
変数や定数に演算などは、言葉は難しいけど日本語になっていました。
でもオブジェクトなんて英語をそのままカタカナにした言葉は、日本語で理解しづらそうです。
ですので、小分けにして少しづつ勉強して行きたいと思います。
もくじ
ワークシートに "Hello, World!"
とりあえず、ワークシートに文字を出してみましょう。
ただ、すでにデータのあるワークシートを書き換えてしまうといけなのいので、Excelで新規ファイルを作成してからVBAの開発画面を出してくださいね。
下のプログラムをVBAエディタにコピペして
Sub hello_on_worksheet()
Worksheets(1).Range("C4").Value = "Hello, World!"
End Sub
▶を押して動かしてみます。
ワークシートのセルC4に"Hello, World!"が入るかと思います。
いかがでしたか?うまくいきましたか?
MsgBox()と何が違うのかな?
以前試したMsgBox()を使ったHello!World プログラムでは、出力する部分は次のような形でした。
Call MsgBox("Hello, World!")
これは、次のような意味です。
- (VBAに内蔵されている)MsgBox()という、引数をダイアログ(小窓)に表示する別のプログラムを呼び出している
- 引数は「Hello, World!」という文字列
でも今回は、
Worksheets(1).Range("C4").Value = "Hello, World!"
途中に「=」が入っています。
これって、前回までにやった「代入」ですね。
つまり、別のプログラムを呼んでいるわけではなくて、
「Worksheets(1).Range("C4").Value」という箱(変数)に
「"Hello, World!"」という文字列を代入しています。
以前、変数には数値や文字列のほかに「オブジェクト」も入れられるとチラッと書いたことがあります。ここで文字列を代入した
「Worksheets(1).Range("C4").Value 」
がオブジェクト(とプロパティ)です。
オブジェクトって何?
今までにも何度か名前だけは出したことがありますね。
英語の「object」は「対象」「対象物」といった意味だそうです。
そのまんまだと「もの」、意訳すれば「それ」とか「あれ」みたいな感じでしょうか。
あれもこれもオブジェクト
パソコンを例にするとパソコンはオブジェクトです。
バラしたときにはケースもオブジェクト、中にはいっている基板もオブジェクト、基板に載っている部品もオブジェクト・・・ 種類は違ってもみんなオブジェクトなわけです。
VBAに限らず、プログラムの話をするときに出てくるオブジェクトも本質的には同じで、プログラムが処理する対象であればそれはオブジェクトです。プログラム自体もオブジェクトだったりします。
普通プログラム上では、オブジェクトを種類分けしていて、種類ごとに特色があります。
「数値や文字列やオブジェクト」のように、オブジェクトってのはデータの種類の一つととらえておいても、ひとまずはOKかとおもいます。
あくまで「ひとまず」ですけど。
ExcelのVBA では、オブジェクトって言葉はプログラムが「いじる」(操作する)対象となる、Excelのいろんな部品(要素)を表現するために使用されます。
例えば、「セル」や「ワークシート」や「ブック(ワークブック)」に、「グラフ」や「範囲」や「フォーム」なんかもオブジェクトです。
VBAではほかにもいろいろなオブジェクトが定義されています。
VBA リファレンスの「オブジェクトモデル」のページを開くと、左側のメニュー枠にたくさんのオブジェクトがでてきます。
全部覚えることはできなそうですので、「必要に応じて探す」ってことだけ覚えておければいいかと思います。探し方は2段階
- まず、MicrosoftのVBAリファレンスのページを検索してみつける
- 次に、リファレンスを見て使えそうなオブジェクトを探す
オブジェクトの中にオブジェクト
VBAから扱えるオブジェクトは階層化されていて、オブジェクトの中にオブジェクトを含みます。
例えば、Excelファイルでは次のような構成になっていますね。
- ブック(ワークブック)オブジェクトは、複数のワークシートオブジェクトを含みます。
- ワークシートオブジェクトはさらにセルや範囲といったオブジェクトを含むことができます。
箱の中にまた箱が入っているイメージでしょうか?
学校→学年→クラスとか、会社名→部署名(部・課・係)とか、県→市→町とかの方がほうがわかりやすいかな?
オブジェクトの階層は「.」でつなぐ
「B組」だけでは学年がわからないので「3年B組」と表すように、オブジェクトを表すときには、上の階層の名前につづいて目的のオブジェクト名を書きます。
つなげるときには、間に「.」を入れます。
例えばさきほどの Hello Worldであれば、 1つ目のワークシートの範囲"C4"を表すために下のように書いてありました。
Worksheets(1).Range("C4")
Worksheets(1)が1つ目のワークシート を表します
Range("C4")がC4セルを含むシート上の「範囲」を表します
これを「.」で繋げてあるので、「1つ目のワークシートの範囲"C4"」となります。
まとめ
今回は、ここまでにしておきます。
EXCEL VBA であつかう、オブジェクトという聞き慣れない言葉について勉強しました。
- (ExcelのVBAでは)オブジェクトとは、プログラムが「いじる」対象を指す言葉です。
- VBAでは、Excelの各要素や値はみんなオブジェクトです。
- オブジェクトは階層化されていて、各階層がそれぞれオブジェクトです。
- 下の階層のオブジェクトは、上の階層から「.」でつないであらわします。
次回はオブジェクトと単なるデータ(値)の大きな違いである 「プロパティ」と「メソッド」 について勉強してみます。