★独学者が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を爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):~バックナンバー~

----------------------------------------------------------------------
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
発行システム:『まぐまぐ!』 http://www.mag2.com/
配信中止はこちら https://www.mag2.com/m/0001691660.html
----------------------------------------------------------------------