★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0040:タイトル:なぜあなたが「いつまで経ってもVBAが上達しないのか?」07 「オブジェクト・プロパティ・メソッドの名前を短い英単語にしてみて、既存の組み込みのそれらの動きの参考になるといいな~」の回。~ついでに、VBAの「真の基礎」のひとつ、「クラスモジュール」の簡単なモノの自作と操作について~ 06
バックナンバー目次ページは→こちらです。
まぐまぐのページは以下です。
https://www.mag2.com/m/0001691660.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
Vol.0040
タイトル:★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0040:タイトル:なぜあなたが「いつまで経ってもVBAが上達しないのか?」07 「オブジェクト・プロパティ・メソッドの名前を短い英単語にしてみて、既存の組み込みのそれらの動きの参考になるといいな~」の回。~ついでに、VBAの「真の基礎」のひとつ、「クラスモジュール」の簡単なモノの自作と操作について~ 06
バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
今回も、一応、前回の続きですが、今回はちょっと別の角度から・・・
これまでクラスモジュールの動きを見ていく中で、日本語のクラスモジュール名やプロパティ名、メソッド名で見てきました。
今回は、
「それがかえってわかりにくい!!!!」
「なげー!」
「うぜー!」
という人のために、
クラスモジュール名やプロパティ名、メソッド名を、「英語の短い単語」に置換してみたいと思います。
細かい動きは見ていきませんが、
プロパティ名などを「英語の短い単語」に置換したモノと、
これまでのように長い日本語のモノとを、
ご自分でまたF8キーやF5キーで動かしてみて、
「両者を見比べて」、
理解のヒントにしていただけたらなと思います。
では早速、新しいクラスモジュールを作りましょう。
前回と同じファイルを使いますが、
ダウンロードできてない人は、前回の号を読んでダウンロードするか、以下からダウンロードしてください。
https://euc-access-excel-db.com/00000WPZIP/own_make_obj_smpl.zip
から、「own_make_obj_smpl.zip」という圧縮ファイルをダウンロードしてください。
解凍すると
「簡易的な自作のオブジェクトや自作のプロパティ、メソッドWpSample.xlsm」
というファイルが出てきます。
それを好きな場所に置いてください(デスクトップとかでOKです。)
で、それを開き、さらに、Alt+F11でVBEを開きます。
以上で準備完了です。
ではまず、新しいクラスモジュールを追加します。
VBEの画面にて、「挿入→クラスモジュール」と押してください。
新しい空っぽのクラスモジュールが生成され、コードペインでは「Option Explicit」の下に点滅カーソルが点滅していると思います。
その状態で、
「プロパティウィンドウ」の「オブジェクト名」のところを書き換えます。
今は恐らくですが、
「Class1」あるいは「Class2」あるいは「Class3」という名前のどれかになっていると思います。
それを「A1Cell」という名前に書き換えます。
「A1セルだけを操作する装置」という意味あいをこめまして、「A1Cell」というクラスモジュール名にします。
すると下図のようにプロジェクトエクスプローラの中の、「クラスモジュール」のところで、各アイコンたちのなかにおいて、一番上に来ていると思います。
では次に、プロジェクトエクスプローラの中にて、
「A1セルonly操作装置1st」のアイコンを「ダブルクリック」してください。
「A1セルonly操作装置1st」というクラスモジュールの中身が全部、見えていると思います。
その状態で、Ctrl+A を押し(「すべて選択」をし)、Ctrl+C(コピー) をします。
で、再度、プロジェクトエクスプローラにて、「A1Cell」をダブルクリックします。
そこでも、Ctrl+A を押し(「すべて選択」をし)、
ただし、今度は、Ctrl+V(貼り付け) をします。
これで、ベースのプログラムがコピペできました。
あとは、プロパティ名やメソッド名などを置換していきます。
ちなみにですが、VBE画面の状態から「F2」キーを押してオブジェクトブラウザを開いてみて下さい。
上手のようになっていて、「A1Cell」を押しても、「A1セルonly操作装置1st」を押しても、「メンバー」のペインの中身は「変化なし」だと思います。
つまり、それぞれのプロパティやメソッドの名前はまったく一緒です。
これは、あたりまえといえばそうなのですが、いま、「A1Cell」に、「A1セルonly操作装置1st」の中身をコピペしたからですね?
で、これから、「A1Cell」の側のプロパティやメソッドの名前を、「英語の短い単語」に書き換えていく・・・・というわけです。
では次に、最初の「置換」をします。
プロジェクトエクスプローラの中の「A1Cell」クラスモジュールのアイコンを(念のために)3回くらい、ダブルクリックしてください。
これで完全に、今現在のコードウィンドウは、「A1Cell」クラスモジュールの中身が見えています。
で、ここで、一番上のプロパティのプロシージャに注目します。
「Property Get プロパティ01_値の状態設定G() As Double」
と書かれている行ですね。
そしたら、その中の、
「プロパティ01_値の状態設定G」の部分をダブルクリックします。
青色反転表示になりますが、その状態で
「Ctrl+H」キーを押します。
置換のダイアログボックスが出てきます。(下図参照)
ここで、以下のように操作します。
①「対象」のところで「カレントモジュール」を押す。
②「置換後の文字列」のところに「Value」と入力。
③「すべて置換」のボタンを押す。
すると、下図のように「・・・5個の項目を置換しました」と出ます。
したらこのメッセージを消して、
後に残った「置換のダイアログ」も消します。
これで、1つの置換が完了しました。
あとは、
すべてのそのほかのプロパティとメソッドの分も、同様の手順で置換します。
以下のように置換して下さい。
(01)「プロパティ98_値の読み書きG」→「Value002」
(02)「プロパティ02_色の状態設定G」→「Color」
(03)「プロパティ03_高さの状態設定G」→「Height」
(04)「プロパティ04_幅の状態設定G」→「Width」
(05)「プロパティ99_A1セル_だけ_をオブジェクトとして返すG」→「A1obj」
(06)「メソッド02_値が100ならメッセージ」→「Msg100」
(07)「メソッド01_A1セル_だけ_をオブジェクトとして返す」→「A1obj002」
(※同じ名前のプロパティやメソッドを作っても一応エラーにならずに作れが、実行時にエラーになるため後尾に「002」を付加して(05)とは違うモノとして作ります。)
ひとまず以上で完成です。
では、ここで、F2キーを押して、もう一度オブジェクトブラウザを開いて、冒頭の状態との違いを見てみましょう。
「クラス」のペインで
「A1セルonly操作装置1st」を押すとこれまでと同じです。
ところが、
「A1Cell」のところを押すと、さっきとは異なります。
先程は「A1セルonly操作装置1st」の内容とまったく同じだったのに、
今は「短い英単語」、つまり、置換した状態と同じになっています。
(下図参照)
図では、それぞれが対応するプロパティとメソッドを矢印で引っ張っておいたので、どう変わったのかのご参考にして下さい。
矢印で引っ張ったもの同士は、「命令内容は・まったく同じ」です。
では最後に、この「A1Cell」クラス、というか、「A1Cellオブジェクト」を操作する標準モジュールのプロシージャを作成します。
以下のコードを、適当な標準モジュールを作ってコピペしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
' ' Sub test001_new2() '1つのクラスから、 '1つのインスタンス(オブジェクトの実体)を作った場合の実験 Dim o_Obj99 As A1Cell Set o_Obj99 = New A1Cell Debug.Print o_Obj99.Value Stop Let o_Obj99.Value = 2 Stop Debug.Print o_Obj99.Value002 Stop Let o_Obj99.Value002 = 10 Stop Debug.Print o_Obj99.Color Stop Let o_Obj99.Color = 16777215 '16777215 Stop Debug.Print o_Obj99.A1obj.Address 'プロパティ Debug.Print o_Obj99.A1obj002.Address 'メソッド Stop Call o_Obj99.Msg100 End Sub ' ' |
↑こうなると、ほぼ、「既存の組み込みのプロパティやメソッド」を使ったときと同じ感じのコードになりますね!
日本語のほうのプロパティやメソッドと比較してみて下さい。
あとは、これをF8キーで実行してみて、これまでのように、どこにジャンプするか?
ジャンプした先のプロシージャの中では、どのような命令を実行しているか?
「本当に A1セルonly操作装置1st ときと同じか?」などをチェックしてみて下さい。
最終的には、
「プロパティやメソッドの名前を長く日本語で書こうが、短い英単語で書こうが、
「やることは同じ」
「プロパティは取得と設定、すなわち、読みこみと書き込みの2つがある」
「メソッドでもプロパティでもオブジェクトをゲットできる」
などのことがわかると思います。
そして、「短い英語名」は、
そのまま、
「組み込みのプロパティやメソッドも同じかたち」
なので、
ということは、
「組み込みのプロパティやメソッドも」
「やることは同じ」
「プロパティは取得と設定、すなわち、読みこみと書き込みの2つがある」
「メソッドでもプロパティでもオブジェクトをゲットできる」
「という感じに考えて差し支えない」、
ともいえます。
同じ動きをするプロパティやメソッドを、違う名前で作ると色々とわかることがあると思いますので、是非、皆さんも色々とやってみてください。
今回は以上です。
==========================================================================
バックナンバー目次とサンプル号
----------------------------------------------------------------------
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
発行システム:『まぐまぐ!』 http://www.mag2.com/
配信中止はこちら https://www.mag2.com/m/0001691660.html
----------------------------------------------------------------------
- 投稿タグ
- 「ニセモノ」への道, 「本物」に近づくために, ExcelVBA, Excel連携VBA, パソコンでの自動化, マクロ, 独学, 自動化