★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0035:タイトル:なぜあなたが「いつまで経ってもVBAが上達しないのか?」02 ~ついでに、VBAの「真の基礎」のひとつ、「クラスモジュール」の簡単なモノの自作と操作について~ 01
バックナンバー目次ページは→こちらです。
まぐまぐのページは以下です。
https://www.mag2.com/m/0001691660.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
Vol.0035
タイトル:なぜあなたが「いつまで経ってもVBAが上達しないのか?」02 ~ついでに、VBAの「真の基礎」のひとつ、「クラスモジュール」の簡単なモノの自作と操作について~ 01
バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
前回、
>「そもそも論」、ですが、
>VBAでは、
>「クラスモジュールこそが」、
>「そもそものVBAの基礎」であって、
>それがわかれば(=カンタンなものでもいいので実際に作ってみれば)、
>「ああ、そういうことだったのか!」
>「なんで先にこれを教えてくれない?」
>と、必ず、なります。
と書いてしまいました。(「必ず」ではなく「多分」かもしれませんが)
また、
>「クラスモジュールを作ること」は、
>「超」
>「難しい」
>と思われているかもしれませんが、
>実は
>「そうでもありません。」
>「5つの動き」、の自作関数が作れて、
>オブジェクト階層構造やコレクションの位置づけなどが
>理解できて入れば、
>「カンタンなモノ」
>であれば、
>「比較的、誰でも、すぐに、理解できます」。
>(古いですがバージョン2000のころの、「VB6」でのActiveX系=COM系のDLLの作り方も同じですし。)
しかし、
>「クラスモジュールの作り方」を
> その仕組みを、
>カンタンな説明から詳しい説明まで、図解で分厚く説明してくれる本も、
>「日本には」、
>「1冊も」
>「ありません」。
とも書いてしまいました。
なので、今回は、超シンプルな「クラスモジュール」の「作成」のことについて、サンプルを実行しながら、ほんの少しだけ一緒に考えてもらえたらな~、何かヒントを得てもらえたえらな~と、思います。
まったくの初心者の方にとっては、ちょっと「?????」「ナニコレ!?意味不明!!!」になってしまうかもしれないので本当に申し訳ございませんが、それでも、一緒に実行などをしていただき、もし「なんとなくてもいいのでわかるところ」があったら、そこだけでも読んでみてください。
よろしくお願い致します。
ではまず、早速、サンプルのダウンロードです。
https://euc-access-excel-db.com/00000WPZIP/own_make_obj_smpl.zip
から、「own_make_obj_smpl.zip」という圧縮ファイルをダウンロードしてください。
(一応、ESETセキュリティでウィルスチェックしてあります)
解凍すると
「簡易的な自作のオブジェクトや自作のプロパティ、メソッドWpSample.xlsm」
というファイルが出てきます。
それを好きな場所に置いてください(デスクトップとかでOKです。)
で、それを開き、さらに、Alt+F11でVBEを開きます。
そのとき、
「標準モジュール」がもし展開されていなかったら、「標準モジュール」のフォルダのアイコンをダブルクリックして展開してください。
「クラスモジュール」のフォルダのアイコンは、展開されていないと思うので、それもダブルクリックして展開してください。
そうすると、それぞれに似た名前のモノが2つずつ、ツリー表示されたかと思います。
で、
まず、クラスモジュールのほうから見てみますが、
そこに、
「A1セルonly操作装置1st」と、
「A1セルのみの操作装置」という
2つのモノ(アイコン)があります。
まず、この2つがそれぞれ、「クラスモジュール」と呼ばれるモノです。
これがそれぞれ、「1つのクラスモジュール」ということになります。
この意味は、たとえば、「A1セルonly操作装置1st」のほうであれば・・・、
(a)「A1セルonly操作装置1st」という名前の「自作のオブジェクト」を生成できますよ~!
(b)「A1セルonly操作装置1st」という名前の「自作のオブジェクト」がユーザーの書いた
命令によって生成されたとき、同時に、そのクラスモジュールに書いた中身のプログラムも、
一気に、芋づる式に、
一緒に使えるようになりますよ~!
(自作のオブジェクトが生成されていなければ、芋づる式に使えるようになりません。
=自作オブジェクトが生成されてなければ、
その中身のプログラムにはアクセスでき「ません」。
=自作オブジェクトが生成されていれば、
その中身のプログラムにもアクセスでき「ます」。)
・・・という意味になります。
「A1セルのみの操作装置」というクラスモジュールのほうも同じです。
(a)「A1セルのみの操作装置」という名前の「自作のオブジェクト」を生成できますよ~!
(b)「A1セルのみの操作装置」という名前の「自作のオブジェクト」がユーザーの書いた
命令によって生成されたとき、同時に、同時に、そのクラスモジュールに書いた
中身のプログラムも、一緒に使えるようになりますよ~!
という意味になります。
では次に、標準モジュールのほうを見てみます。
このとき、今現在の状態としましては・・・、
標準モジュールの「自作obj操作1st」のほうには、
「A1セルonly操作装置1st」という自作のオブジェクトを生成して、
その中身のプログラム(プロパティやメソッド)を使うコード・・・、
つまり、
「A1セルonly操作装置1st」というクラスモジュールをオブジェクト化して、
実際に動かしてみるコード、
が書かれています。
同じく、標準モジュールの「自作オブジェクト操作2nd」のほうには、
「A1セルのみの操作装置」というクラスモジュールをオブジェクト化して、
同じことをするコード
が書かれています。
【注~ここから】
※「クラスモジュールをオブジェクト化(実体化)すること」、
=「クラスモジュールに書いた内容(設計図)をモトに、
そこスタートでオブジェクトを生成すること」を、
「インスタンスを作成する」とか「インスタンス化する」などと言ったりします。
「インスタンス(instance)」の直訳は、「例、実例」、ということのようです。
※クラスモジュールに書いたものは、書いただけでは何も使えず、
その書いたものをモトに、
「インスタンス化」
=「実体化」
=「オブジェクト化」
=「インスタンス生成(=インスタンスの作成=実体の作成)」
=「オブジェクト生成」
ということをしてからでないと使えません。
で、その「インスタンス化(実体作成)」をするためには、
「Set」や「=」、「New」といった命令単語を使って、
「インスタンス化」します。「New」は特に、参照設定してある場合に使います。
なお、実体化する場合は、「Set」や「=」、「New」という命令だけでなく、
「CreateObject関数」といった命令を使って実体化することも結構あります。
なので、「実体化の命令は一つじゃない(=場面によって色々と使い分ける)」、ということは、
いちおう、覚えておいてください。
ただ、実体化するといっても、ユーザーフォームやワークシート、グラフ、
などのように実体化されたものが「目に見えるモノ」であるなら、
「実体ができた!」と 分かりやすいのですが、
今回のテストのようなオブジェクトは、
「メモリの中に実体化されるだけで、画像としては目に見えてこないオブジェクト(装置)」
なので、ちょっと、イメージしづらいかもしれません。
ただ、クラスモジュールによる自作のオブジェクトは、
そのような「目には見えないオブジェクト(メモリの中に実体化されるだけの)」という
タイプになることが結構多い・・・、ということを覚えておいてください。
(つまり、「目に見えるものだけ」が「オブジェクトだ」と「錯覚・誤解しないように」してください。)
そして逆に、
『 目には見えていなくても、オブジェクト(装置)は「生成=実体化」されるんだ!
生成・実体化できるんだ!!(メモリの中に)』、
ということも覚えておいてください。
(組込のモノでは「FileSystemObject」などは、
まさに目に見えないオブジェクトですよね)
でも、そもそも、
「目には見えないオブジェクト(メモリの中に実体化されるだけの)」
ということ自体が、
すでに、本当に分かりづらいと思いますが、すみません。
「スケルトンなオブジェクト」が生成される・・・みたいに理解してくれるといいかも?
です・・・・。
なお、実体化(インスタンス化)、に使う命令語句は、「Set、=、New」だけでなく、
「×××.Add」メソッドや「CreateObject関数」なども、そうかもしれません。
(まだ僕自身が初心者なので、確信がないですけど、おそらくそうなんではないかな~?
なんて思ってますです。でも現時点では自信ないので、
プロの方にも聞いてみてください。
ちなみに、「CreateObject関数」は参照設定していないライブラリに含まれているオブ
ジェクトを実体化したいときに使ってる・・・という気がします。)
【注~ここまで】
というわけで、これから、この2つの標準モジュールを使って、
「A1セルonly操作装置1st」や
「A1セルのみの操作装置」というクラスモジュールを使って、
その名前のオブジェクトを生成し、
すこし操ってみたいと思います。
カンタンな操作しかしないし、説明も今回は詳しく書かないので、
「なんじゃこりゃ?」になってしまうかもしれませんが、
でもそれでも・・・、
「あれ?クラスモジュールってもしかして意外と怖くないのかも?」
「クラスモジュールとかプロパティとか、メソッドとか、言ったって、
結局は関数のようなもののカタマリか!
オブジェクトってある意味”プログラム集 ”なのかも?・・・?」
「クラスモジュール作って中に関数をいっぱい書いておくと、
それがプロパティやメソッドと自動認識されて、インテリセンスの
ドロップダウンにも表示されるようになるから、
いちいちモジュール開いてその最上部のドロップダウンでプログラムを
探さなくてもよくなるから便利!」
「オブジェクトブラウザにも載るんだね!」
「 ”決まり切った動き ”を、50回とか100回とか、”何度も何度も ”したい・させたい時は、
標準モジュールでやるよりも、クラスモジュール化してしまったほうが、
かえって面倒が減るかも!」
・・・といったようなことを感じて頂けたら幸いです。
でも、特に、初心者の方は、マジで「なんじゃこりゃ?」になってしまうでしょうし、もちろん、
上記のことも、チンプンカンプンでそこまで分からないとも思いますが、
でもこれも、それについても、それでも、
動きや現象を実際に見てみることで、
「クラスモジュールってやつを書くと一応、こんなことができるのか・・・」とか、
「クラスモジュールってやつを書いて、オブジェクトを自作できるようにすると、
とりあえずこういう・こんなことができるのか・・・」
というようなことだけでも、少し、感じて頂けたらなあ、と思います。
では、今回はまず、「動かし方」と「チェックの仕方」から、少しご説明します。
では はじめに、標準モジュールの「自作obj操作1st」のほうから。
「A1セルonly操作装置1st」という自作のオブジェクトを生成して、操ってみます。
「A1セルonly操作装置1st」は、
『 アクティブなシートの「A1セル」だけに何かをする 』、
そういう「オブジェクト」=「装置」、です。
※これまで「オブジェクトとは、”装置”と理解するといいですよ~」と何度も言ってきましたので、ここでもそうしたいと思います。
では、まずは、Alt+F11で、Excelの通常画面の方に行き、
「自作オブジェクトテスト用」というシートをアクティブにします。
A1セルに「2」と入力されていると思います。
(罫線が消えちゃってますが気にしないでください)
では、このA1セルの「2」を消して、空白セルにしちゃってください。
で、再度、Alt+F11にて、VBE画面のほうに戻ります。
そして、ExcelのシートのA1セルが見えるように、VBEの画面自体の位置を調整します。
このとき、「イミディエイトウィンドウ」も表示しておいてください。
できましたら、標準モジュールの「自作obj操作1st」をダブルクリックしてください。
「自作obj操作1st」モジュールの中身が表示されます。
一番上に、test001()というプロシージャ(プログラム)があると思いますのでそれを探します。
見つかったら、そのプログラムコード内のどの行でもいいので、クリックして、点滅カーソルを表示させます。
それができましたら、まずはF8キーを押してください。
「Sub test001()」の行が黄色くなったはずです。
では、もう一度、F8キーを押します。
Dim o_Obj01 As A1セルonly操作装置1st
という行が実行されて、次行が黄色くなって、止まっています。
ちなみに、実行された「 Dim o_Obj01 As A1セルonly操作装置1st 」は、
「おいパソコンよ!」(おいExcelよ!)
「o_Obj01」というオブジェクト変数に、「A1セルonly操作装置1st」という「型」「タイプ」のオブジェクトを代入させたいから、
「o_Obj01」というオブジェクト変数も、「それと同じ型」にしておけよ~!
という感じの命令です。
これで、「o_Obj01」というオブジェクト変数が「A1セルonly操作装置1st」という「型」という「型」に設定されました。
詳細説明はすみませんが、省かせて頂きます。
でも、ここで、以下の3つのことも必ず覚えておいてください。
★「クラスモジュールにつけた名前が、「オブジェクト名」になる。
(=「クラスモジュールにつけた名前が、
そのクラスを実体化したときの「オブジェクト名」になる。
(「クラス名」と言った方がより正しいのかもしれませんが、
ここではあえて「オブジェクト名」と表現させてください。
「オブジェクト」のことと関連が深いので・・・。)
これは、オブジェクトブラウザの「クラス」ペインに登場することで
確認できます。)
★「クラスモジュールにつけた名前が、その「オブジェクト」の「型 の名前」にもなる。
(=「クラスモジュールにつけた名前が、
そのクラスを実体化したときのその「オブジェクト」の「型 の名前」にもなる。
当然、ウォッチウィンドウの「型の列」でも、F8キー実行時にその「型」が
確認できる。)
変数宣言のときに使います。
★コードを書いている最中に、「インテリセンス機能」のドロップダウンに、
クラスモジュール名や、その中に内包されるプロパティ名、メソッド名、
などが登場するようになる。
【例】
「変数宣言のとき」
→「AS」と半角スペースを入力直後に、
「クラスモジュール名=オブジェクト名」が、
「型」の名前として、インテリセンスのドロップダウンの中に
登場するようになります。
「クラスをインスタンス化(実体化)するコードを書くとき」
(=Setなどを使って、オブジェクト変数にクラス=ここではObjectを代入する時)
→「Set」と「=」を使って、「New」と半角スペースを入力直後に、
「クラスモジュール名=オブジェクト名」が、
「型」の名前として・・・、
というよりも、そのまま「オブジェクト名」として、
インテリセンスのドロップダウンの中に登場するようになります。
「クラスをインスタンス化(実体化)したコードを書いたのち」
(=代入の済んだオブジェクト変数を扱うとき)
→いたる場面で、オブジェクト変数のあとに、「.」を書いた時点で
そのオブジェクトに含まれる、プロパティやメソッドの名前が
インテリセンスのドロップダウンの中に 登場するようになります。
※ただし、「Set、=、New」を使っていても、、総称型の・・・、
つまり、「Object」型や「Variant」型のオブジェクト変数に
オブジェクトを代入した時は、インテリセンス機能自体が働きませんので
ドロップダウン自体も表示されません。
これは、参照設定してあってもしてなくてもです。
『 アーリーバインディング(事前バインディング)のときだけ
=オブジェクト変数の「型」の指定が、
総称型の「Object」や「Variant」ではなく、
「Workbook」や「Workbooks」、などの固有型・・・、
つまり、「型」が「明確に決まったとき」だけ 』
しか、
インテリセンスは機能しません。
(ただし、機能しない場合であっても、
「変数宣言時の、ASと半角スペースの入力直後のときだけ」は機能します。)
インテリセンスが機能しない場面としてよくあるのは、「CreateObject関数」などを
使って、「Object」型や「Variant」型のオブジェクト変数にオブジェクトを
代入した時、それ以降、です。
インテリセンスは、どんなシチュエーションにあろうとも、
オブジェクト変数の「型が」「明確」(つまりは固有型)であれば、機能し、
ObjectやVariant型(つまりは総称型)なら機能しません。
よって、Sheetsコレクションを使った場合のように、
グラフシートか、ワークシートか、その他のシートか、どれを返して
くれるのか明確ではない返し方(引数次第で変わる)をする命令語句の場合、
突然、インテリセンスがピンポイントで働かなくなることがあります。
(Sheetsコレクション・・・というか、Sheetsプロパティで返ってきたものを、
例えば、「明確なるWorksheet型=固有型」
のオブジェクト変数に代入したときは、そのあとは、
インテリセンスが機能します。
何の変数にも代入せず、「Sheets("ワークシート名")」とか、
「Worksheets("ワークシート名")」という生の式のまま、
それでコードを書いたり、
あるいは、
何らかの変数に代入したとしても、
「Sheets("ワークシート名")」とか、
「Worksheets("ワークシート名")」という式を、
「Obuject」型や「Variant型」のオブジェクト変数に代入してしまうと、
それは、「型が明確に決まってない状態」に「なってしまう」、ので、
インテリセンスは機能しません。
「Sheets」コレクション・・・というか、「Sheets」コレクションをゲット
するための「Sheetsプロパティ」の戻り値は、
「Object」という総称型だし、
「Worksheetsコレクション」をゲットするための
「Worksheetsプロパティ」は、
結局は
「WorksheetsコレクションではなくてSheetsコレクションを返す」、
という「変則的・例外的」な「決まり・掟」になっているので、
つまり、最終的な「戻り値は、Sheetsプロパティと同じ」という意味になり、
これも、
「Object」という総称型のオブジェクト=「シートかグラフかわからないモノ」
が、返ってきてしまいます。
なので、インテリセンスが機能しなくなります。)
では、もう一度、F8キーを押します。
Set o_Obj01 = New A1セルonly操作装置1st
が実行されて、次行で黄色く止まっています。
Set o_Obj01 = New A1セルonly操作装置1st
は、
実際に、「New」というキーワード(新規作成、みたいな感じの命令単語)を使って、
「A1セルonly操作装置1st」というクラスモジュールをベース(設計図)にして、
そこスタートで現実に「A1セルonly操作装置1stオブジェクト」を自動生成し、
かつ、
「Set」と「=」を使って、
「o_Obj01」というオブジェクト変数に、その「New」キーワードで自動生成したモノを
代入しています。
イメージとしては・・・、
「New」というキーワードを使って、
「A1セルonly操作装置1st」というクラスモジュールをベース(設計図)にして
その「コピーっぽいモノ」を作りあげ(「完全な独立したコピー」とは違うっぽいですが)、
それを、「Set」と「=」で、「o_Obj01」の中に代入している・・・
・・・みたいな感じです。
そういう「イメージ」です。
まだ僕自身、よくわかっていなくてすみません。
(※ キーワード=命令単語のことです。VBAでの「キーワード」という言葉は、
ヘルプにも非常に多く出てきますが、世間一般の常識とは異なり、
「重要単語」という意味は全く無く、
単なる「命令単語」という意味だけしかありません。)
これで、
「o_Obj01」
は、
イコール、
「A1セルonly操作装置1st」だ、
ということになりました。
逆から言うと、
今は、「A1セルonly操作装置1st」というオブジェクトは
「o_Obj01のことを指している」、
という意味にもなります。
ではここから、F8キーではなく、F5キーを使います。
F5キーを1回押してください。
プログラムの途中に「Stop」という命令を書いてあるので、そこでいったん停止し、黄色くなっていると思います。
イミディエイトウィンドウには「0」と表示されましたでしょうか?
これは
「Debug.Print o_Obj01.プロパティ01_値の状態設定G」
というコードが実行されて「0」を返してきた・・・、という意味になります。
最初、A1セルには「2」が入っていましたが、さっき「空白」に書き換えたので、
また、「プロパティ01_値の状態設定G」という自作のプログラム(この場合は自作のプロパティ)の影響もあって、「0」という数字が返ってきてる・・・と、
今そういうかたちです。
(初心者の方には、もうすでにチンプンカンプンかもですね。すみません!!)
ちなみにですが、このとき、
先程、「Set」と「=」と「New」にて、
「A1セルonly操作装置1st」というオブジェクトは
「o_Obj01のことを指している」
ということをやったので、
「o_Obj01」は、イコール、「A1セルonly操作装置1st」、のことを意味しています。
なので、
「o_Obj01.プロパティ01_値の状態設定G」
は、(「o_Obj01」を「A1セルonly操作装置1st」に置き換えると)
「A1セルonly操作装置1st.プロパティ01_値の状態設定G」
と
同じ意味、
という意味にもなります。
(※ただ、実際には、「A1セルonly操作装置1st.プロパティ01_値の状態設定G」と書くとエラーになってしまいますが。でも、「意味合い」としては、「両者は同じ・・・」ということが言いたかったのでした。)
では以降は、繰り返し、同じことをしていきます。
再度、F5キーを押します。
今度は、
「Let o_Obj01.プロパティ01_値の状態設定G = 2」
が実行されて、Stopしています。
このとき、シートのA1セルに「2」という数字が入ってますでしょうか?
これは「o_Obj01(=A1セルonly操作装置1st)」が内包している、
「プロパティ01_値の状態設定G」という名前のプロパティが、
A1セルに「2」を代入した・・・と、
そういうかたちです。
では再度、F5キーを押します。
「Debug.Print o_Obj01.プロパティ98_値の読み書きG」
が実行されてStopします。
イミディエイトウィンドウには「2」と表示されましたでしょうか?
これは
「Debug.Print o_Obj01.プロパティ98_値の読み書きG」
というコードが実行されて、先ほどA1セルに入力された「2」を返してきた・・・、
という意味になります。
これは「o_Obj01(=A1セルonly操作装置1st)」が内包している、
「プロパティ98_値の読み書きG」という名前のプロパティが、
A1セルの入力値の「2」を返してきた・・・と、
そういうかたちです。
再度、F5キーを押します。
「Let o_Obj01.プロパティ98_値の読み書きG = 10」
が実行されてStopします。
シートのA1セルに「10」と入力されたと思います。
これは、「o_Obj01(=A1セルonly操作装置1st)」が内包している、
「プロパティ98_値の読み書きG」という名前のプロパティが、
A1セルの入力値に「10」を代入した・・・と、
そういうかたちです。
再度、F5キーを押します。
イミディエイトウィンドウに「16777215」と表示されまたと思います。
これは
「Debug.Print o_Obj01.プロパティ02_色の状態設定G」
というコードが実行されて、A1セルの色の値の「16777215」を返してきた・・・、
という意味になります。
これは「o_Obj01(=A1セルonly操作装置1st)」が内包している、
「プロパティ02_色の状態設定G」という名前のプロパティが、
A1セルの色の値の「16777215」を返してきた・・・と、
そういうかたちです。
再度、F5キーを押します。
「Let o_Obj01.プロパティ02_色の状態設定G = 16777215」
が実行されてStopします。
シートのA1セルに「16777215」という色の値(色の番号)が代入(=設定)された状態です。
前行で判明した同じ色の値を代入したので、セル自体は色の変化は無く、白いままです。
これは「o_Obj01(=A1セルonly操作装置1st)」が内包している、
「プロパティ02_色の状態設定G」という名前のプロパティが、
A1セルの色の値の「16777215」を代入した・・・と、
そういうかたちです。
再度、F5キーを押します。
イミディエイトウィンドウに「$A$1」と表示されまたと思います。
これは
「Debug.Print o_Obj01.メソッド01_A1セル_だけ_をオブジェクトとして返す.Address」
というコードが実行されて、A1セルの色の値の「$A$1」を返してきた・・・、
という意味になります。
これは「o_Obj01(=A1セルonly操作装置1st)」が内包している、
「メソッド01_A1セル_だけ_をオブジェクトとして返す」という名前の、
今度は「メソッド」が(プロパティではなく)、
A1セルをオブジェクトとして返してきたので、
さらに、その「Address(セル番地)」の値の「$A$1」を返してきた・・・と、
そういうかたちです。
再度、F5キーを押します。
イミディエイトウィンドウに「A1の値の10は、100じゃないです!」と表示されたと思います。
これは
「Call o_Obj01.メソッド02_値が100ならメッセージ」
というコードが実行されて、「A1の値の10は、100じゃないです!」というメッセージを返してきた・・・、
という意味になります。
これは「o_Obj01(=A1セルonly操作装置1st)」が内包している、
「メソッド02_値が100ならメッセージ」という、これも「メソッド」が、
「A1の値の10は、100じゃないです!」というメッセージを返してきた・・・と、
そういうかたちです。
なぜそんな動きをするのかというと・・・
実は、「メソッド02_値が100ならメッセージ」という、「メソッド」の中には・・・、
「A1セルの値が100だったら、メッセージボックスでメッセージをポップアップし、
そうじゃなかったら、イミディエイトに今回のようなメッセージを表示しろ」
・・・というプログラムが、既に・事前に書いてあるんです。
で、
今回は、セルの値は「10」であって、「100」じゃなかったので、
それで、イミディエイトウィンドウに「A1の値の10は、100じゃないです!」と表示されました。
(※なので、このメソッドは、以前の号でお話しした「5つの動き」のうち、「何も返さずに、何らかの動きだけをするモノ」となります。)
以上が、最初のプログラムの動きです。
この動きをF5キーを使って、何度も繰り返して、実際のシートの動きと、
「A1セルonly操作装置1st」の命令たちの内容から、少し動きを想像したりしてみてください。
プロパティやメソッドを、日本語で作ったので、その日本語から、「もしかしてこういうことなんじゃないか?ああいうことなんじゃやないか?」と、色んな事を想像してもらえたらうれしいです。
ちなみにですが、今のVBEが開いて「test001」の中に点滅カーソルが在る状態のまま、
F2キーを押してオブジェクトブラウザを表示してみてください。
「クラス」のペインの一番上に、「A1セルonly操作装置1st」が表示されていると思います。
そして、それをクリックすると「メンバー」のペインに、
今F5キーでプログラムを動かしたときの、プロパティやメソッドの名前がずらっと並んでいると思います。
ここからも、説明ペインを見たりして、色々想像してみてください。
(※「説明ペイン」は上図の一番下の、「Public Property ・・・なんちゃらかんちゃら・・・」と表示されているエリアのことをいいます。)
そのような「想像」「推測」が、「ある日突然の爆発的な理解や上達」につながる、
その「きかっけ」になったりしますので・・・。
今回の事で、何かが分かった方もいらっしゃるかもしれませんね。
(いらっしゃらないかもですけど(^^))
今回のテストでは、ひとまずは、ここまでいったん区切りとさせていただきますが、
次回は、F8キー「だけ」を使って、より細かく、実行の様子を、一部、見てみたいと思います。
今回は以上です。
==========================================================================
バックナンバー目次とサンプル号
----------------------------------------------------------------------
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
発行システム:『まぐまぐ!』 http://www.mag2.com/
配信中止はこちら https://www.mag2.com/m/0001691660.html
----------------------------------------------------------------------
- 投稿タグ
- 「本物」に近づくために, ExcelVBA, Excel連携VBA, パソコンでの自動化, マクロ, 独学, 自動化