初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

オブジェクトをロボに例えるとすげーわかりやすくて震える2-初心者のためのExcel エクセルマクロVBA入門

ロボ(オブジェクト)同士の関係


前回やった続きです。またオブジェクトをロボに例えてお話しましょう。前回、エクセルはたくさんのロボ(オブジェクト)が集まってできている(集合体)ということをお話しました。だから、マクロでエクセルを動かすには数あるロボの中から、特定のロボを選んで命令を書く必要があります。これが「プログラミング」です。

では、このロボ同士は互いに独立しているのでしょうか?ということをお話したいと思います。

ロボ(オブジェクト)の親子関係


簡単にいうと、ヤッターマンヤッターワンみたいな感じです。マトリューシカを思い浮かべてもいいですかね。

f:id:drumer2sh:20131108121938p:plain
出典http://yatterman.jp/yatterman1977/mecha.html
まるしー:タツノコプロ


f:id:drumer2sh:20131108121944p:plain


つまり、ロボ同士は親となるロボがいて、その中にまた別のロボがいるわけです。そして、一番大元になるロボがエクセルにはいます。それが・・・

Applicationオブジェクト(ロボ)

です。母なるロボ。(笑)

この母なるロボApplicationオブジェクトはエクセルいわゆる基底オブジェクトと呼ばれています。他のいろんなロボはこのApplicationロボの子供たちになります。さらに、子供は次の親になっています。
例えば、ワークブックロボはシートロボの親ですし、シートロボはRange(セルの範囲)ロボの親です。
当然ロボはロボなので、それぞれに機能と状態を持っているのです。

この親子関係はとてつもなく重要なので、しっかりと理解してください。
なぜなら、親を指定しないとわからないことが多いからなんです。例えばRangeロボを操作しようとしても、どの親のRangeロボなのか?がわからないとエクセル自体はどれを操作していいのかわかりません。だって通常だとシートロボが3体いるもの。

つまり、この親子関係を理解していないと正しくロボに指示を出すことができないということなんです。

インスタンスの寿命


ロボも仕事をしてくたびれてきたら、作り直したり、いったんスクラップされますが、オブジェクトもまったく同じことが言えます。正確にはインスタンスの寿命です。前回の洋服引出ロボが一度設計図(クラス)によって作られ、洋服引出ロボが出撃し、何かミッションをこなします。こなし終わった後、残念ですが洋服引出ロボは役割を終えて、破棄されるのです。悲しいですけど。。。

なぜ破棄するのでしょうか?

それは、エクセルには動かすことができる範囲が決まっているからです。ちょうど普通の机をイメージしてください。クラスからロボ(インスタンス)を作成すると机にどんどんロボが置かれていきます。破棄しないとロボはどんどんたまります。机の大きさは決まっていますが、ある時ロボが机からあふれる時が来ます。


「メモリオーバーフロー」

の出来上がりです。こうならないように、インスタンスは作成されその役割が終わると自動的に削除(破棄)される仕組みがエクセルには備わっているのです。
特に何もしなくても、自動的にインスタンスは破棄されますが、明示的に破棄する方がいいと思います。破棄する呪文はVBAでは。。。

Set 洋服引出ロボ = Nothing

これで、インスタンスの破棄をしたことになります。


これで、オブジェクトの説明は大体、終わりです。
簡単なクラスを自分で作ってみて、インスタンスの作成、使用、破棄。とやってみるといいかもしれません。


次回当たりに簡単なロボの例をエクセルでやってみたいと思います。


今日はここまで!

かしこ