★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0023:ついでに、ウォッチウィンドウの「一般的に、普通に使う使い方」も少し-06。(エラー回避の基礎07)★超重要事項!! !!そもそも「式」とは?値やオブジェクトが返ってこないものは「式」「ではない」?
バックナンバー目次ページは→こちらです。
まぐまぐのページは以下です。
https://www.mag2.com/m/0001691660.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
Vol.0023
タイトル:ついでに、ウォッチウィンドウの「一般的に、普通に使う使い方」も少し-06。(エラー回避の基礎07)
★超重要事項!! !!そもそも「式」とは?値やオブジェクトが返ってこないものは「式」「ではない」?
バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
今回も前回の続きです。
が・・・・
またやってしまいました!
ごめんなさい!
・・・・と謝るべきなのかどうなのか分からなくなってしまいましたが、一応、謝っておきます。
ちょっと自信が無くなってきたので・・・・。
訂正といいますか・・・・
ごめんなさい。m( _ _ )mm( _ _ )mm( _ _ )m
でも、もしかしたら、謝らなくてもいいことかもしれません。
そのヘンのことをちょっと書きますのでよろしくお願い致します。
ただ、このこともヘルプなどを読むには「超重要」なことなので、また、「誤解しやすいところ」と思って、是非、読んでみてください。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★
★ 今日、今から書くことは、もしかしたら、
★ 本メルマガでこれまでに書いてきたことの中では、「もっとも重要なこと」かもしれません。
★
★ どうか、必ず、いつも、今日の、このことを考えていてください。
★
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
*********
前回、一部分で以下のように書きました。
◆ 「VBAとは」、
◆ 「”式”」も、「値またはオブジェクトを返す」。「短い命令語句と同じように。」です。
◆ そして、「値またはオブジェクトを返さない ”式 ”は」、
「100%」、「1っつも無い!!!」。です。
◆ 例えば「短い”命令単語”」はメソッド等の中で値やオブジェクトを返さないモノがあるけれど、
◆ 「”式”」の場合は、「値やオブジェクトを返さないモノ」は、「100%」、
「1っつも無い!!!」です。
◆ 何も「返ってこない」式や、「エラーや ”不正です ”のようになる」式は、
そもそも「式」の体をなしていません。
そもそも「式」として「成り立っていない」し、「間違っている」ので、何も返ってきません。
「式」として間違っていなければ、必ず、F8キーのステップ実行を最後までやることで、
「何かが ”返る ”」という動きになります。
◆ だから、VBAのコードのうち、その「9.5割以上」が、「返すという動きをする」と考えていい。
◆ 「ウォッチウィンドウ」は、その動きや返ってくる値やオブジェクトの内容や型のことが
(大体のところが)すぐにわかるので、だからこそ、
程度の低い著者や編集者たちが書いたテキトー・かつ・お茶を濁した説明の腐った市販書籍や
サイトよりも、よっぽどか「明確」で、「信頼性も高」く、「学習のコスパをアップ」します。
◆ なので、もし「F8キー実行」をひととおり最後までやっても何も返ってこなかった「式」や
エラーが出たり、「不正です」のように表示された式は、
「式ですらない」、「間違っている」、「間違った式」、なので、
「ああ、俺は(私は)いま、間違った式を書いているんだな・他に正解の式があるんだな」
「間違った文字列をドラッグしてウォッチウィンドウに放り込んでしまったんだな」と、
すぐに判断が付きます。
◆ と考えてもおおむねOK!(特に初心者のうちは)ということです。
ここで、
『 ◆ そして、「値またはオブジェクトを返さない ”式 ”は」、「100%」、「1っつも無い!!!」。』
と書いてしまいまして、
『 あ!間違えた! メソッドを含む式の場合、
値やオブジェクトを返すタイプのメソッドの時はいいけど、
”何も返さない何らかの動きをとるだけのメソッド ”があるわ!
だから、そのタイプのメソッドが含まれた式については・・・・、
「値またはオブジェクトを返さない ”式 ”は、100%、1っつも無い!!!」。
って、ことはないかも?! 』
・・・・と気が付いたと・・・・
そういう次第でございます。
でもここで・・・・
ヘルプとかを読んでいると、
そもそも
「式」
というのは・・・・、
「何かを返すモノだけ」
「何かを返す前提で書かれた文字列だけ」
というニュアンスで書かれているな、ということを、思い出しました。
つまり、メソッドを含む場合・・・、
・値やオブジェクトを返すタイプのメソッドの場合はもちろんいいけど、
・「何も返さない何らかの動きをとるだけのタイプのメソッド」・・・
・それが含まれた式は、
・「そもそも」「式」と、「呼べるのか?」
という疑問が沸いてきました。
前回までの内容では、
『演算子、各種関数、リテラル値、変数、プロパティ、メソッド、などを含んだ文字列は「式だ」』
ということで書いていましたが、
今回は、そのなかで、
「メソッド」について「だけ」を見ているわけなんですが、
メソッドを含む式については、
「 ”値やオブジェクトを何も返さないタイプのメソッド ”を含んだモノ」「だけ」は、
「式」「ではない」
「式」とは「呼べない」
「かも?」
ということについて少し考えてみたいと思います。
もし、
『 「値やオブジェクトを返さないメソッドやそれを含んだ文字列」「だけ」は、「式」「ではない」かも? 』
ということが言えそうなら、
ウォッチウィンドウの動きが「まさにそのとおり!」なので、さらに、ウォッチウィンドウで色々と堂々と調べやすくなると思います。
ではまず、ここで例えば、
「pwqry.xlsm」という名前のExcelファイルを作って、
「A1」セルに「a」とか「1」とか適当な値を入力してください。
そして、標準モジュールに以下のようなコードをコピペしてみて下さい。
1 2 3 4 5 6 7 8 9 10 11 12 |
' ' Sub test9999() Workbooks("pwqry.xlsm").Activate Workbooks("pwqry.xlsm").PrintPreview Workbooks("pwqry.xlsm").Worksheets("Sheet1").Activate Workbooks("pwqry.xlsm").Worksheets("Sheet1").PrintPreview End Sub ' ' |
もし「pwqry.xlsx」と、「xlsx」形式でファイルを作ったら、上記のコードも同じように「xlsm」を「xlsx」に全部書き換えます。(ただその場合、このコードのテストはできますが、保存ができなくなります。)
で、
この
Workbooks("pwqry.xlsm").Activate
Workbooks("pwqry.xlsm").PrintPreview
Workbooks("pwqry.xlsm").Worksheets("Sheet1").Activate
Workbooks("pwqry.xlsm").Worksheets("Sheet1").PrintPreview
をそれぞれ全部、1行ずつ、ウォッチウィンドウの中にドラッグしてみます。
(※ドラッグするかわりに、各文の先頭、というかそれぞれの一番左端の位置でクリックすると、ドラッグしなくても一発で1行分を選択できます。一番左端で「I」のマウス形状が「矢印」の形状に変化したタイミングでです。この挙動はテキストエディタやWordでも同じです。)
で、F8キー実行をします。
A1セルに値を入力しているため、途中、何度も(1行実行するたびに)、印刷のプレビュー画面が出てきますが、出るたびに赤い「×」ボタン等々で消してください。
そしてそのたびにウォッチウィンドウを、変化があるか無いか、チェックしてください。
最初のF8キー押下時の内容と、特に変化は無いと思いますが、「変化なし」というところを確認してください。
(A1セルに何もデータが入力されていないと、印刷プレビュー画面は出てきません。)
すると、
Workbooks("pwqry.xlsm").Activate
Workbooks("pwqry.xlsm").PrintPreview
の2つは、ウォッチウィンドウの「値」の列にて、「ウォッチ式が不正です」と出ます。
で、
Workbooks("pwqry.xlsm").Worksheets("Sheet1").Activate
の場合は、「True」という値が返ってきています。型は「Variant/Boolean」です。
さらに、
Workbooks("pwqry.xlsm").Worksheets("Sheet1").PrintPreview
の場合は、「False」という値が返ってきています。型はこちらも「Variant/Boolean」です。
で、
ヘルプを読むと、
Workbook.Activateメソッド のヘルプページも、
Workbook.PrintPreviewメソッド のモノも、
Worksheet.Activateメソッド も、
Worksheet.PrintPreviewメソッド も、
「構文」のところに、
式.Activate
(式→Workbook オブジェクトを表す変数です。)
(あるいは、 式→Worksheetオブジェクトを表す変数です。)
とか
式.PrintPreview(EnableChanges)
(式→Workbook オブジェクトを表す変数。)
(あるいは、 式→Worksheetオブジェクトを表す変数。)
などと書かれています。
まず、このときのヘルプに書かれている「式」の意味ですが、「メソッドまで」は含まれていません。
もともと「メソッド」とは、「Activate」や「PrintPreview」のことですから。
つまりここでは・・・、
「先頭からメソッドの直前のドットの前まで」が「式」と表現されています。
これはプロパティのヘルプページの場合も同じです。
で、このとき、
「もともとのメソッドの部分もプロパティの部分も」「式」というモノには「含まれない!」
と考えてしまうと、
特に、そもそもプロパティの場合は「値やオブジェクトを返すモノばっかり」ですので、やっぱり「おかしい」です。
メソッドの場合にしても、値やオブジェクトを返すメソッドの場合は、「ウォッチ式が不正です」とはなりませんので、そういうメソッドを除外することもやっぱり「おかしい」です。
じゃあ、「ウォッチ式が不正です」と出る「メソッド」を含んた式の場合はどうでしょうか?
これは強引に、「式じゃない!」と言ってもいいかもしれません・・・・、
が、でもやっぱり、同じ「Activate」であっても「PrintPreview」であっても
親オブジェクトが変わると・・・
つまり、親オブジェクトが、ブックではなくてワークシートの場合は、
「TrueやFalse」が返ってきてしまっています。
オブジェクトブラウザで調べてみても、それぞれ全部、説明ペインには「AS Boolean」とは表示されてこないのにもかかわらず・・・・。
※注
オブジェクトブラウザの「説明ペイン(一番下の区画)」において、その中に書かれたモノについて、「カッコの外側」に「AS ×××」と表示されていない場合は、プロパティであろうがメソッドであろうが、「戻り値は無い」、と判断するのが、いちおう、原則になっています。
実際に、オブジェクトブラウザで確認するとわかりますが、メソッドは基本的には、説明ペインにて、カッコの外側に「AS ×××」と表示されている場合も決して少なくはないですが、でも、『 表示されない場合 のほうが多い 』です。
参考図→ https://euc-access-excel-db.com/00000WPIMG/2020-10-05---15-53-56.jpg
(これは、プロパティであろうがメソッドであろうが、です。)
メソッドの場合、半分以上は「AS ×××」と表示されない場合だと思います。
つまり、「値やオブジェクトを返さないものが多い」、ということです。
ちょっと意味不明な動きをしますね。
このテストから何かを導き出すことはできないようです。
が、いずれにしても、
「このように、いろいろな良く分からない挙動をとる」ので、
結局、「はっきりしたこと」が「言えません」。
なので、やっぱり、現時点では、「式は式」ということで・・・・、
「値やオブジェクトを返さないタイプのメソッドやそれを含んだ文字列」「であっても」、
「式は式だ」、
と考えるほうが今のところは無難なのかもしれません。
ただ、ヘルプを読むと「式」とは、以下のように定義されており、プロパティはともかく、
「オブジェクトを返さないタイプのメソッド」「だけ」は、「”式 ”からは・省かれて」考えられているようなフシがあります。
『 ★(式 とは、)★、
文字列、数値、オブジェクトのいずれかに評価される、
キーワード、演算子、変数、定数の組み合わせ。
計算、文字列の処理、データのテストなどを行うときに式が使われます。 』★★★
つまりは、明確な「答え・値」、が、
「文字列、数値、オブジェクト」のうちの「いずれか」で、「出る」。
そういうモノ・そういう文字列・そういう文・そういう計算式、のこと?のように読めます。
で、まず、この中の、
「評価される」とは、非常に大雑把には、
「~と判断できる」とか、
「イコール(=等価)だ」という意味に捉えてイイと思うので、
(「式の評価」の詳しい意味についてはhttps://thom.hateblo.jp/entry/2016/05/25/140304 をご参照ください)
「文字列、数値、オブジェクトのいずれかに評価される」
という記述の部分を考えてみますと、
「文字列、数値、オブジェクトのいずれかと等価だと判断できる」
とか、
「文字列、数値、オブジェクトのいずれかとして返ってくる」
とか、
「文字列、数値、オブジェクトのいずれかとイコールの」
などという意味に読めます。
(戻ってくるのは文字列や数値ばかりではなく、「日付やTrue/False、各種定数」などもありますが、ただ、それらは「数値に変換できる」ので、その意味では「数値」に含んでも良いのかも?)
つまり、
『 最終判断として、「文字列、数値、オブジェクトのいずれか」とイコールの意味、の、』
『 複数の、「キーワード、演算子、変数、定数」たちを、混ぜて組み合わせた1つの命令文。
あるいは、その一部分。 』
『 それが、』
『 式。』
(※日付やTrue/False、各種定数、などは数値に変換できるので、「数値」にはそれらも含めて。)
ということです。
となると、
「値、あるいは、オブジェクトを返さない ”何らかの動きだけをする ”タイプのメソッド」やそれを含む式は、
もちろん
「値、あるいは、オブジェクトと ”イコール=等価 ”の意味になるわけがない」です。
「値、あるいは、オブジェクトを返さない」のですから。
それはつまり、
「値、あるいは、オブジェクトに評価される」ことはない・・・・
「値、あるいは、オブジェクトと判断される」ことはない・・・・ということですし、
もちろん「値、あるいは、オブジェクトを返さない」ですし、
また、
もちろん「値、あるいは、オブジェクトとイコール」
でもないので、
堂々巡りになってしまってすみませんが、
「そもそも」
「評価自体」が「できない」
「評価自体」が「成立しない」
「評価」としては、「”等価 ”ではない」
ということになるので、
結果、
「式」「とは呼べない」
と考えられなくもないです。
つまり、
「メソッドのうち」、
「値やオブジェクトを ”返す”タイプのプロパティやメソッド」は 、「式」と捉えてもいいけど、
「値やオブジェクトを ”返さない ” タイプのプロパティやメソッド」は 、「式」”と捉えることはできないよ!、
と読めなくもありません。
(※プロパティに「値やオブジェクトを返さないプロパティ」なんて在るのかどうか分かりませんが・・・。)
★訂正★
「何も返さないタイプの・何らかの動きをするだけの、そういうタイプのメソッド」には、例えば以下のようなものがあります。
Workbook.Protect 変更できないようにブックを保護するだけ。何も返さない。
Workbook.Save 指定されたブックへの変更を保存だけ。何も返さない。
Workbook.Activate 指定したブックをアクティブにするだけ。何も返さない。
など。
(親オブジェクトが変わると、主にTrueやFalseなどの値が返ってくることが少なくないので、必ずメソッド単体ではなくて「親オブジェクト込み」、「親オブジェクト+メソッド」で考えます。)
基本、ウォッチウィンドウにドラッグしたとき(かつ、まだ、F8キーが全く押されていない時点で)、「ウォッチ式が不正です」と出るメソッドは、何も戻り値が無いと考えて良いようです。
それに対して、「対象範囲外」と出るメソッドは何らかの戻り値があると考えて良いようです。
(多いのはTrueやFalse。Falseはメソッドの動作をキャンセルしたときや失敗したときなどに返ってくるようです。あとEmpty値が返ってくるモノもあります。)
また、今回たまたま見つけた、以下の2つのWebページを読むと、「メソッド」や「何も返さないメソッド」は除外して考えているフシもあります。
(a)式の構文の概要の「式の概要」
https://support.microsoft.com/ja-jp/office/%E5%BC%8F%E3%81%AE%E6%A7%8B%E6%96%87%E3%81%AE%E6%A6%82%E8%A6%81-ebc770bc-8486-4adc-a9ec-7427cce39a90#bmoverview
(b)「VBA 式と式の評価 ~数式だけが式じゃない~ 」
https://thom.hateblo.jp/entry/2016/05/25/140304
前者はAccessのためのページ(しかもVBA専用ではない)ですが、でも、Excelでも似ていると考えていいと思います。
「オブジェクト、コレクション、プロパティ」の項の図のところを見ると分かると思いますが、「メソッド」自体がぜんぶ、最初から除外されて書いてあります。
なお、「式の概要」の図も、「そもそも式って何?」ということについて、「すごく考え方の参考、助け」、になります。なお、ここで言っている「値 」はリテラル値のことかもしれません。
後者は、尊敬できる方のWebページですが、ここでは「オブジェクト式」と書いてあるので、メソッドも含めて考えておられると思います。
実例が表のかたちで示されているので、僕が何度もウザく言っています、
「演算子、各種関数、リテラル値、変数、プロパティ、メソッド、オブジェクト式、・・・云々」
のことも少しイメージしやすくなったのではないでしょうか?
とくに、
『 式=数式のイメージが離れない方は、式という言葉の定義に立ち戻って考えてみよう。式とは、 記号・数字などを用いて物事の関係・構造などを表したものをいう。プログラミング以外でも、た とえば分子構造を表す化学式は、計算しない式の代表選手である。』(引用)
というところなども、僕のような文系人間にはうれしいご説明です。
ただ、(再度・引用ですが)、
『 ここで、「おや?」と思われた方もいるだろう。プロパティが評価されるのは分かるが、
メソッドが評価されるというのはどうも不可解に思われるかもしれない。
実はメソッドには値を返すもの と返さないものがある。
再度繰り返すが、評価とは値を確定することである。
つまり値を返すということは、そのメソッドは式として評価できるということである。』
とも書かれています。
(このサイトでは、「値」という意味に「一般データもオブジェクトも」両方を含めて
書いておられます。
ヘルプでもそちらの意味の傾向が強いですが、僕は、
「文字ベースの一般データやオブジェクト」と書くと長くなってしまうので、あえて、
「値(=一般データ)やオブジェクト」と書いてしまっています。すみません。)
これは
「逆に言うと、値やオブジェクトを返さない式は、式とは評価できない」
という意味にも読めます。
↓こういうことのように読めます。
★★★ 「何も返さないタイプの・何らかの動きをするだけのメソッド」を含む式、命令文は、
★★★ 「何らかの”動作 ”をするだけ」で、「何かを評価する」「わけではない」ので、
★★★ 確かに「プログラムコード」「命令の一種」ではあるけれども、
★★★ でも、
★★★ 「”式 ”とは呼べない」「”式 ”ではない」「そもそも」。
・・・ということです。
※注(再)
オブジェクトブラウザの「説明ペイン(一番下の区画)」において、その中に書かれたモノについて、「カッコの外側」に「AS ×××」と表示されていない場合は、プロパティであろうがメソッドであろうが、「戻り値は無い」、と判断するのが、いちおう、原則になっています。
実際に、オブジェクトブラウザで確認するとわかりますが、メソッドは基本的には、説明ペインにて、カッコの外側に「AS ×××」と表示されている場合も決して少なくはないですが、でも、『 表示されない場合 のほうが多い 』です。
参考図→ https://euc-access-excel-db.com/00000WPIMG/2020-10-05---15-53-56.jpg
(これは、プロパティであろうがメソッドであろうが、です。)
メソッドの場合、半分以上は「AS ×××」と表示されない場合だと思います。
つまり、「値やオブジェクトを返さないものが多い」、ということです。
逆にプロパティの場合は多いです。
今回本当にたまたま見つけたWebページですが、このように尊敬できる方が、同じとは言わないまでも、僕と似たような考え方をしておられる(というか、この方の言うことのほうが正しい。)と思うと、自分も大きくは間違ってないのかもしれない?と少しほっとしますし、うれしくもなります。
この2つのWebページは、
『 ヘルプで読むところの=ヘルプで書かれているところの「式」のイメージもまったく同じ 』なので、
必ず、読んでおいてほしいと思います。
というわけで、だいぶ・・・・、
「何も返さないタイプの・何らかの動きをするだけのメソッド」を含む式、命令文は」、
「”式 ”とは呼べない」「”式 ”ではない」「そもそも」。
・・・・という考え方に傾いてはいますが、でも、いずれにしましてもまだ自信がないので、
ひとまず、冒頭に書いたことを以下のように訂正させてください。
◆ 「VBAとは」、
◆ 「”式”」も、「値またはオブジェクトを返す」、という動きをします。
◆ 「短い各種の命令単語たちと同じように。」です。
◆ そして、現実には「値またはオブジェクトを返さない ”式 ”は」、
「かなり」、「少ない!!!」。です。
◆ 現実には、
◆ 「実際に自分が書いたコードのうち、に限れば」、
◆ その「95%以上」の「式」が、「値またはオブジェクトを返す」、という動きをします。
◆ 例えば「短い”命令単語”」の場合は、
特に「メソッド」の中においては、「値やオブジェクトを返さないモノ」があるけれど、
◆ 「”式”」の場合も同様に、
それが含まれた「式」だけは「値やオブジェクトを返さない」です。
◆ でも「値やオブジェクトを返さないモノ」はそれだけであって、
あとは(他は)、「100%」、「1っつ残らず」、「全ての式が」、「何かを返す!!!!」
です。
◆ 何も「返ってこない」式や、「エラーや ”ウォッチ式が不正です ”のようになる」式は、
基本、(メソッドを除く)そのほとんどが、そもそも「式」の「体をなしていない」と言えます。
そもそも「式」として「成り立っていない」し、「間違っている」ので、何も返ってきません。
「式」とは、「文字列、数値、オブジェクトのいずれかとイコールになるモノ」、だからです。
「式」として間違っていなければ、必ず、F8キーのステップ実行を最後までやることで、
「何かが ”返る ”」という動きになります。
(繰り返しますが、「何も返さないメソッド」がらみ以外は。)
◆ そして、現実のコードの量からすると、
「値やオブジェクトを返さないメソッド」を含む式はあまりなく、それよりも、
逆にそのようなメソッドを含まない式や、
プロパティや関数を含む式のほうが、
「圧倒的に多い」です。
◆ だから、VBAのコードのうち、その「95%割以上」が、「返すという動きをする」と考えていい。
(おまけに、その返ってくるモノの実際の値も、型も、ある。)
◆ 「ウォッチウィンドウ」は、その動きや返ってくる値やオブジェクトの内容や型のことが
(大体のところが)すぐにわかるので、だからこそ、
程度の低い著者や編集者たちが書いたテキトー・かつ・お茶を濁した説明の腐った市販書籍や
サイトよりも、よっぽどか「明確」で、「信頼性も高」く、「学習のコスパをアップ」します。
◆ なので、もし「F8キー実行」をひととおり最後までやっても何も返ってこなかった「式」や
エラーが出たり、「ウォッチ式が不正です」のように表示された式は、
「式ですらない」、「間違っている」、「間違った式」、なので、
「ああ、俺は(あたしは)いま、間違った式を書いているんだな・他に正解の式があるんだな」
「間違った文字列をドラッグしてウォッチウィンドウに放り込んでしまったんだな」
「この区切り方じゃなくて、別の区切りにしないとダメなんだな」
「そもそも何も返さない”短い命令単語”を含んでいるんだな」などと、
すぐに判断が付きます。
さらには、
「その単位、粒度、文字列の長さ」、で「モノを考えたらいけない」
「エラーが出ない単位、粒度、文字列の長さ」、で「考えろ」、
「そもそも何も返さない”短い命令単語”を含んでいないか?」を「考えろ」「調べろ」、
「ドットが多い、少ない、スペース要らない」等々、「調べろ」
という意味にもなります。
◆ と考えてもおおむねOK!(特に初心者のうちは)ということです。
結局、謝ることになってしまいました。(^^)
でも、ここは大事なところですので、是非、みなさんも「本当のところはどうなのか?」を先生に質問したり、自分で考えたり調査してみたり、を、してみて下さい。
繰り返しますが、
前出の『 https://thom.hateblo.jp/entry/2016/05/25/140304 』の、引用した説明にもあるように、
「値やオブジェクトを返さないタイプのメソッドが含まれた文字列」は「式ではない」
と考えることもできます。
なので、それに基づくと、別に当初の「100%、1っつも無い!」というのも、あながち間違いではない・・・・と言えるのかもしれません。
(※更なる例外があるかもしれないので、今回は「100%、1っつも無い!」とは断言しないようにしておきました。)
そして、オマケですが、こうも言えると思います。
★★ 「VBAとは」、
★★ 「演算子であろうが、各種関数であろうが、リテラル値であろうが、、変数であろうが、、
プロパティやメソッドであろうが、オブジェクト式であろうが」、
★★ さらには、それらを複合的に含んだ「式」に至るまで、(=「式」であろうが)
★★ ぜんぶ、ぜんぶ、
★★ それらは「だだ単に」「呼び方」や「使うシーン・用途が違うだけ」で、
★★ 「原則的には」、
★★ 「以下の3つのことでできている」と言っても過言ではありません。
★★ それは、
★★ (01)何かを「返す」という動きをとる。(引数が在る無しに関わらず)
★★ (02)「返すモノ=値(一般データ)やオブジェクト」のその実際の内容。
(返ってくるモノは、大別するとその2つしかない。)
★★ (03)「返すモノ=値(一般データ)やオブジェクト」のその「型」。
★★ というその3つ。です。
★★ ・・・・ということは・・・・、
★★ 単純に、VBAとは、「単にその3つの積み重ね」。
★★ 単純に、VBAとは、「単にその3つが”チリ積も”になったモノ」。と言えます。
★★ 「VBAコードは、その3つでできている」と言っても過言ではありません。
(※他のプログラミング言語もそんな感じかも?)
★★ だから、その3つが常に、「同じようにリレーできているか?」を間違わなければ、
エラーは激減するし、「自分で組み立てる」ための「その基礎」が、
「短期間に身に付く確率が非常に上がる」、と思います。
★★ ただし、短い命令単語たちはともかく、「式」の場合は、その式の「長さ・区切った地点」
によって、その「3つ」の内容(特に「型」)が変わるので、そこだけ注意が必要です。
でも逆に言うと、式の長さ・区切る位置を色々と変えてウォッチウィンドウで調べると、
「かえって」、色々なこと・色々な「違い」が分かるようになって、
「VBAが」、「ある地点から」「爆発的に上達する」ことに、とっても貢献しますので
是非、色々な長さで区切ってウォッチウィンドウで調べてみるとイイです。
★★ よって、
★★ どんな短い命令単語や、どんな長い式であっても、
★★ (01)そもそもそれは何かを返すのか返さないのか?
★★ (02)もし返すなら何を返すのか?どんな値(内容)なのか?
★★ (03)もし返すなら、それはどんな「型」なのか?
★★ の3つを、地道に「事前に調べて」、ズレが生じていないか?を確認するところから始めると
★★ そしてそれを繰り返し、積み重ねると
★★ ある日突然、「ハラ落ちし」、そのおかげで、「爆発的に」、「上達し」、
★★ 「VBAコードがスラスラと理解できる」、そういう日が、
(特に、初心者用のWebサンプルやQ&Aの回答くらいならスラスラと理解できる日が)
★★ 必ず来ます。
★★ なので、その「3つのこと」を「短時間に調べやすい」「ウォッチウィンドウ」の操作は、
初心者のVBAの学習には「必須」です。
★★ ちなみにオブジェクトブラウザでもヘルプでも「戻り値が無い」と「書かれている」のに、
「実際には」戻り値がある場合もあるので、
そういったことは、「ウォッチウィンドウでしか分からない」です。
★★ そして、「ウォッチウィンドウ」はどんな市販書籍やWeb記事よりも、「明確」「的確」です。
そして「速いし・早い」です。
4流以下の低脳な著者や編集者が作ったゴミみたいな市販書籍やWeb記事よりも、
100倍、いろんなことが、「明確」「的確」に、分かりますし、
しかも、「自力で」、
色々なことを「調査・判別・判断」、できるようになります。
たとえば、何かをウォッチウィンドウにドラッグして
「ウォッチ式が不正です」というエラーが出たら、
「その単位、粒度、文字列の長さ」、で「モノを考えたらいけない」という意味になります。
「エラーが出ない単位、粒度、文字列の長さ」、で「考えろ」、
「そもそも何も返さない”短い命令単語”を含んでいないか?」を「考えろ」「調べろ」、
「ドットが多い、少ない、スペース要らない」等々、「調べろ」
という意味になります。
★★ そして、オブジェクトブラウザとヘルプが読めるようになると、
さらに、理解が「加速」します!!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★
★ 今日、ここで書いたことは、
★ 本メルマガでこれまでに書いてきたことの中では、「もっとも重要なこと」かもしれません。
★
★ どうか、必ず、いつも、このことを考えていてください。
★
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
今回、とても重要なことなので、ここで切りよくさせて頂こうと思います。
今回は以上です。
==========================================================================
バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01
----------------------------------------------------------------------
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
発行システム:『まぐまぐ!』 http://www.mag2.com/
配信中止はこちら https://www.mag2.com/m/0001691660.html
----------------------------------------------------------------------