★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0045:タイトル:「VBA」において「学習しなければならないこと」一覧-04

  
バックナンバー目次ページは→こちらです。

まぐまぐのページは以下です。
https://www.mag2.com/m/0001691660.html
  
  
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)

Vol.0045

タイトル:★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0045:タイトル:「VBA」において「学習しなければならないこと」一覧-04
  
  
バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  

あなたは下記のことを読んでどう思いますか?

********************************************

「ちゃんとした ”オブジェクト指向のプログラミング ”ができるひと」の中には、

  

「VBAは確かに、他のオブジェクト指向プログラミング言語と比べれば、

 ”できないこと ”もあるけれど、でも、だからといって、

 言われるほどひどい言語仕様じゃない。

 でもVBA業界の先駆者たちの指導内容はひどい。

 行き当たりばったりな内容ばっかりで、彼らがVBAの価値を下げている。

 もしVBAがバカにされるとするなら、それは先駆者たちの自業自得。」、

  

という意見もあります。

********************************************

  

  

前回は余談が「超」長すぎてすみませんでした。

  

今回は前回お知らせした表(PDF)のご説明です。

  

今回ご説明する表↓

『 ステートメントを構成する「式 or 式じゃないもの」の 構成要素 』
https://euc-access-excel-db.com/00000WPPDF/statem-elem-new01.pdf

  

今回も「メチャクチャ重要なことばかり」を書きます。
(同じ事ばかり何度も書いてウザすぎてすみません)
  

前回と前々回、前々々回同様、できれば全部「暗記」したほうがいいと思うことばかりです。
(もちろん理解の進む範囲内で徐々に。いきなり全部は当然無理、なので。)

  

『「VBA」において「学習しなければならないこと」』の2つめの一覧についてです。

  

前回は「やりたいこと目線」「各種処理内容別・各種処理目線」など・・・での、
学習項目の」一覧表でした。

少し「逆引き辞典的」な、内容でした。
  

今回はそれとは違い、「ステートメント目線」「プロシージャ目線」での学習項目の一覧です。
  

「ステートメント」とは、「命令文」「文章」と訳すといいです。
細かくは前号のとおりです。

  
  

★★ 多くのVBAの市販書籍やサイト、動画は、「やりたいこと目線」の説明ばっかりで、
「文法目線(言語仕様目線)」「ステートメント目線」「プロシージャ目線」「クラスモジュール目線」での解説が少なすぎます。
  

★★ だから初心者用の市販書籍や動画を終えた後に、「とたんに難しく感じ、すぐ挫折」になるのです。
  

だから他の言語を扱える人からバカにされるのです。
多面性が無い教え方をするから。

もちろん、VBAはバカにされても平気な言語です。
もともと。

だってプログラマじゃない人も扱う言語ですから。

  

しかし、
だからと言って、
「文法目線(言語仕様目線)」「オブジェクト指向目線」での学習・とらえかた、もできないと、
それをサボっていると、
「まったく成長できない」のも「現実」です。
  

★ 特に「ある地点からの爆発的な上達」は見込めません。
★ というか、ほとんどの人が、初心者本レベルで挫折するお決まりのパターンになります。
  

★ VBA的に、「いつまで経っても」「バカのまま」「カモられる」だけです。
  

★★★ また、「特に」、「他の言語を学ぶ前の学習」「他の言語にもVBAの学習経験を生かす」ということが、できなくなります。

「VBAなんていい加減な言語を覚えても他の言語には役に立たない。
 そもそもVBA使ってる奴らなんて、オブジェクト変数やオブジェクトの意味も
 まるでわかってないじゃんか。バカすぎる。」
なんて言われてしまいます。

で、実際にそうです。
(ちゃんとした説明を受ければそんなことにはならないのに。
 特に「プロシージャ」と「クラスモジュール」の説明。)

例えば、ExcelVBAエキスパート試験のテキスト(旧版)の中に書かれた文法の説明どおりの理解のままでは、
永遠にそう言い続けられてしまいます。

「VBAの学習は、”プログラミング言語の学習には無駄 ”な学習」と言われないためにも、
ExcelVBAエキスパート試験のテキスト(旧版)よりも、もっとまともな文法を学ぶ必要があります。
  

「ちゃんとした ”オブジェクト指向のプログラミング ”ができるひと」の中には、
「VBAは確かに他のオブジェクト指向プログラミング言語と比べれば、
 ”できないこと ”もあるけれど、でも、だからといって、
 言われるほどひどい言語仕様じゃない。でも業界の先駆者たちの指導内容はひどい。
 行き当たりばったりな内容ばっかりで、彼らがVBAの価値を下げている。
 もしVBAがバカにされるとするなら、それは先駆者たちの自業自得。」、
という意見もあります。

僕も「ExcelVBA初心者目線から、であってすらでも」、そう思います。

実際、今の特に市販書籍の教え方だと、
「自力でのエラー解決ができなく、下の中くらいの腕のまま、お金を払って一向に上達しない・・・」、
という状況に追い込まれます。

  

本メルマガがそれを回避するための、なんらかのヒントになればいいなあと思います。

  

ここでは、
「ステートメント目線」(ひいてはプロシージャ目線)で学習項目を眺めることで
「文法目線(言語仕様目線)」での学習のヒントになればなと思い、
その一覧表をご紹介したいと思います。

もちろん、初心者の僕が作ったものなので、
「オブジェクト指向プログラミング」からすれば「レベルが低い」とは思いますが、
でも現時点ではそれすら説明されない状況で、初学者はカモにされていると言っても
過言ではないので、その状況を少しでも解消するきっかけになればと思います。

  

なお、今回のこの一覧表は、前々回とその前の回の「やりたいこと目線」での一覧とリンクもできます。
前回の表、
https://euc-access-excel-db.com/00000WPPDF/vba-learning-items-by-purpose.pdf
の、一番右の列が、今回の表の薄いグリーンとイエローの部分とリンクしています。

2つの表を印刷して、横に並べて置いて(前回のを左、今回のを右に置いて)、
2つの表を連動させて見てみてください。
何かのヒントになれば幸いです。
  

では、以降で、
『 ステートメントを構成する「式 or 式じゃないもの」の 構成要素 』
https://euc-access-excel-db.com/00000WPPDF/statem-elem-new01.pdf
の説明(?になってるかどうかわかりませんが)をさせて頂きます。

  

=============

では以降、本文です。
  

この表は、
縦に、「式か」「式じゃないか」が並び、
横に、「Excelの組み込みの命令等々」か、「自作の命令等々か」が並んでいます。

完璧に区分けするのは難しい(たぶんプロでも誰もできない)と思うので、
「だいたいで」とか「まあ、こんなイメージで」みたいな感じで捉えてください。

「ステートメント」のことは前号でもご説明しましたが、「命令文」「命令構文」などと訳すといいと思います。

「ステートメント」は、命令文1行分や、1ブロック分のことをさします。
なお、長い1行だと、「 _ 」(半角スペースとアンダースコア)で何行かになっている場合があります。

  

いきなりですみませんが(特に初心者の方にはすみませんが)、

VBAのプログラムの最小単位である「プロシージャ」は、「ステートメント」の集まりでできています。

そしてその「ステートメント」は、「式」と「式じゃないもの」でできています。

  

これは、初心者の方は、今は「ふーん」でもOKです。
おいおい、意味が分かるようになれば。

でも、いつかは、「そうか」と理解できないといつまで経っても下の中くらいの腕から
脱却できませんので、必ず・・・、

「プロシージャ」は、「ステートメント」の集まりでできていて
その「ステートメント」は、「式」と「式じゃないもの」でできている・・・

ということは理解できるようになってください。

逆に言うと、
それが理解できれば、
「学び始めて1年後に爆発的にVBAが上達する」、
その可能性があります。

再度、逆に言うと、
それが理解できないなら、
「学び始めて1年後に爆発的にVBAが上達する」、
その可能性は、
「永遠に」
「ゼロ」です。

ご注意ください。

  

で、今回の表では、その「式」と「式じゃないもの」、あと、「キーワード」が重要な意味を持っています。
  

早速ですが、

「式じゃないもの」、というのは、僕だけが言っていることです。
一般的な書籍やサイトではこんな言い方をするものはありません。
  

『「ステートメント」に含まれるもののうち(=「ステートメントを構成する要素のうち) 』、
『「式」と呼べるモノ「以外」の部分・・・ 』を、

どう表現したらよいかが分からずに、僕の独断と偏見で、勝手にそう言っているだけです。

  
  

具体的には・・・、

・ステートメント用の「キーワード」=ステートメント名
  (Sub、Function、Dim、Const、Private、If、Then、Else、Do、For、Next、Call、など)
・記号(「:=」、など)
・値を返さないメソッドやプロシージャ名(自作関数名)
・型の名前
 (Integer、String、Date、Boolean、Range、Worksheet、クラスモジュール名=型名、など)
・「:=」を使って引数の指定に使うときの「引数名」

・・・などのことを指します。
  

詳しくは、今回の表の「イエロー部分」を見てくださるといいと思います。

  
  

ただ、今回、「演算子」は、今回の表の中では「式」のほうに含めてしまいました。

例えば
「1+2」みたいな式は「+」が「演算子」ですが、
実際には「+」単体だけだと、「式じゃないもの」に含まれると思います。
(後述する「値」も「型」も確定しないので。)

でも、
「1」と「2」のような「ある意味”引数”もセットで」使うことが多いですし、
何より「1+2」という感じの「式」に、
「式を構成する要素」として含まれる、ことが多いです。
「+」だけではなく、「-」や「/」「*」「=」「or」「And」などの演算子も同様です。

なので、「式を構成する要素」、として、「式」の側に含めてしまいました。

  
  

初心者の方には本当に申し訳ございません。
今は全くもって意味不明だと思いますので、とりあえずは「ふーん」でOKです。
でも、いつかは、「ああ、そういうことが言いたいのか」と察してくださると幸いです。

でも、
「ステートメント」を構成するもの、として「式」と「式じゃないもの」という意識を
持つことは重要なので、ご自分の思った言い回しをぜひ、作ってください。
じゃないと上達が遠のいてしまいますので・・・。
ご迷惑をおかけして申し訳ありません。m( _ _ )m

  

ただ、言い訳になってしまってすみませんが、

『「ステートメント」に含まれるもののうち 』、
『「式」と呼べるモノ「以外」の部分・・・ 』、

について、
明確な説明をしてくれる市販書籍やWebサイト、動画、等々ば「ゼロ」であり、
結果的にそれが、
「ステートメント」の意味・構造をわかりにくくし、
「誤解させ」、
上達を遅らせてしまいます。

具体的には、オブジェクトブラウザやヘルプ、
デバッグ(エラー解決)に必須のウォッチウィンドウを
読めなくさせられます。

そしてそういう風に「ステートメント」や「式」などの説明をサボっているクソな奴らばかりなので、
(あ、お下品ですみません・・・)仕方なく、この表現を使っています。
  

「式じゃないもの」については・・・、

『 文法的に正しい・間違っていない「複数の語句の集まりか、単語1語」を見たときに 』、
『 何らかの動き・処理しかせず、何の値も型も返ってこない・評価がなされないモノのこと 』・・・、

と思ってくださって良いです。
  

何かを「開く、新規作成、追加する、削除する、書き換える、集計する、・・・」等々をおこなうだけで、
何の「値も型も」「返ってこない」、「評価がなされない」、
そういう「複数の語句の集まりか、単語1語」・・・、
のことを指します。

  

  

「式」については今後どこかで詳しくお話ししたいと思いますが、簡単に言うと、

『「値」と「型」が確定したもの。』とか、
『「値」と「型」の評価が完了したもの。』

などと理解してOKです。

※「値」には(大別すると)、「文字系のモノ」と「オブジェクト」の2種類があります。

  

具体的には、前々号の
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01-43
でも少しご説明しましたが、以下の(a)~(e)のことを指します。かなり「広範囲」です。

(a)以下のVBAの組み込み命令単語・1語(引数含む・「値を返すもの」のみ。

・VBA関数(Excel専用、Office共用)のうち、「値を返すもの」のみ。
  (※かなり多いです。95%以上かも?わかりませんけど・・・。)
・ワークシート系関数=WorksheetFunctionオブジェクトのメソッドたちの多分全部
  (※Excelにしか存在せず、Wordなどには無いです。)
・プロパティの全部
・メソッドの一部(3割~半分以下くらい?かも?)

(b)リテラル値・1語
末尾に「%、&、!、#」などの「型宣言文字」を付加したものを含みます。

(c)なんらかの値が代入された「変数や定数(配列変数含む)」・1語

(d)オブジェクト式・単独
ThisWorkbook.Worksheets("Sheet1").Range("A1")、とか、
ActiveSheet.Cells(1,1)、みたいな、
「オブジェクト」として評価される、複数単語をドットでつないだもの。

(e)演算子(=記号的な命令)と複数の「(a)~(d)」と記号などの組み合わせ

  
  

初心者の方には意味不明で本当にすみませんが、これも「ふーん」と思ってください。
エラー処理を経験しないと分からないかもしれないので・・・・。
分かる方はそのように思っていてください。
  

なお、厳密には違うかもしれませんが、以下のように捉えてもいいと思います。

「式」とは・・・、

『 単語一語、あるいは、複数の語句の集まりを、
  青色反転表示選択したのちにまんまで、
  VBEのウォッチウィンドウにドラッグで放り込んだときに、
  エラーも出ずに、かつ、
  「値」の列と「型」の列が明確に決定した(内容表示がなされた)場合の、
  「式」の列の内容。』、

のこと・・・、

です。

  

短く言うと

『 気になる複数の語句の集まりか単語1語をウォッチウィンドウにドラッグで放り込んだ際、
 「値」と「型」が確定した場合の、「式」の内容 』

っていう感じです。

  
  

『「値」の列と「型」の列が明確に決定した』というのはプログラムが進行するなかでは、
その状態が「プログラム動作中ずっと」ではなくて、「瞬間」の場合もあるのでそれもOKです。

過去の号の参考画像(ウォッチウィンドウへの「式」のドラッグ放り込み)
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01-19     

  

例えば、

の場合、値と型のところに、答えが表示されています。
このような状態を「値と型が確定した」「値と型の評価が完了した」と呼びます。

その状態の時なら、この図の中の「1>2」は「式だ」と言うことができます。
「式」の列に存在しているわけですから。

このとき、「値と型」にエラーの文言が表示されていると、
それは「式」ではありません。

繰り返しますが、
『「値」の列と「型」の列が明確に決定した』というのが、
プログラムが進行するなかでは、
その状態が「プログラム動作中ずっと」ではなくて、
「瞬間」の場合もあるので、その場合もOKです。

以上、「式」というモノの簡単な「見分け方」「調べ方」でした。
  

ちなみにですが、「式じゃないもの」をウォッチウィンドウで見た場合は、前述のとおり、

『 文法的に正しい・間違っていない「複数の語句の集まりか、単語1語」を見たときに 』、
『 何らかの動き・処理しかせず、何の値も型も返ってこない・評価がなされないモノのこと 』・・・、

と書かせて頂きましたので、

『 文法的に正しい・間違っていない「複数の語句の集まりか、単語1語 』を
ウォッチウィンドウにドラッグで放り込んだときに、
『 値も型もエラー文言の表示ではあるものの 』、
『 でも、最終的にエラーは出ないし、けど、何らかの動作・処理を、正しく行ってくれた場合 』の
『「式」の内容 』、
もしくは
『 ステートメント用のキーワード単独 や「演算子単独や記号単独」など。』・・・・、

という感じです。

わかりにくくてすみません。

なお、
『 文法的に正しい・間違っていない「複数の語句の集まりか、単語1語 』
と書きましたが、
これが、
「文法的に正しくない・間違っている」という場合、
ウォッチウィンドウにドラッグで放り込んだ時点で、
「値や型」の列ではなく、
通常のエラーのダイアログメッセージのウィンドウが「ポン」と
出ることが多いので、
「あ、この複数の語句は何かおかしいんだな。
  語句の選択自体がおかしいか、スペルミスか、他の原因だな」
と分かります。
  

====================

で、

例えば以下のようなプロシージャがあった場合を考えます。
  

  
この場合、

Sub Test01()
から
End Sub
まで、
すべての記述行が「ステートメント」です。
なので、このプロシージャには「ステートメント」が全部で「9行」ある、ということになります。
  

Dim aaa As Integer
Dim bbb As Integer
Dim ccc As Integer

のこの3行のステートメントはすべて、それぞれが、「Dimステートメント」という種類のステートメントです。
VBAに限って言うと、「宣言ステートメント」に属します。
(他の言語は異なります。)

で、「Dim」は「ステートメント用のキーワード」=「ステートメント名」です。
つまり「Dim」はあくまでも「キーワード(=予約語=組み込みの命令用の”単語”)」なので、「ステートメント」ではありません。

「ステートメント名」、と「名」が末尾に付くところにご注意ください。

「Let」で始まる3行はそれぞれが、「Letステートメント」という種類のステートメントです。
これもVBAに限って言うと、「代入ステートメント」に属します。
「Let」は「ステートメント用のキーワード」=「ステートメント名」です。

「Call」で始まる1行は「Callステートメント」という種類のステートメントです。
VBAに限って言うと「実行可能なステートメント」に属します。
「Call」は「ステートメント用のキーワード」=「ステートメント名」です。

で、
例えば
「Dim aaa As Integer」という1行のステートメントを見た場合、
「Dim」はステートメント名なので、「式じゃないもの」です。
「aaa」が「変数名」で、式としたいところですが、プログラムが始まらないうちは、まだ値と型が決まらないので、「式じゃないもの」です。
 でも、プログラムが始まると、1行目の「Sub・・・」の行が実行された「瞬間」に、その値が「0」で、型が「Integer」と決まるので、「式」となります。
 これは「F8キー」押下での「ステップ実行」をするとわかります。
「As」はただの「キーワード」で、定義づけに使うだけの、値も何も返さないものなので「式じゃないもの」です。意味的には「~として」みたいな意味でいいと思います。
「Integer」は「型」の名前なので、「式じゃないもの」です。

「Let aaa = 1」という1行を見た場合は、
「Let」はステートメント名なので、「式じゃないもの」です。
「aaa」は「数値」の「1」が代入されたので、「値」が「1」で「型」が「Integer」で、「式」のまま、です。
「=」は「代入しろ」という意味(命令)の演算子ですので、演算子単独だと「式じゃないもの」です。
(今回の表は「式」に含んでしまいました。すみません。分かりにくかったらイエロー部分に含めてしまってもいいです。)
「1」は、ウォッチウィンドウにドラッグすると、値が「1」で型が「Integer」と確定する(=評価される)ので、「式」になります。

「Call MsgBox(ccc)」というという1行のステートメントを見た場合は、
「Call」はステートメント名なので、「式じゃないもの」です。
「MsgBox(ccc)」は「cccをメッセージ表示しろ」、という関数(=命令)ですが、
  「どのボタンがクリックされたのかを示す値を数値で返す」という関数(=命令)令なので
  「MsgBox(ccc)」をウォッチウィンドウに放り込むと、
  返ってきた値が「1」、型が「Long(長整数型)」と評価が決まるので、
  「式」と判断して良いと思います。

最初の行の「Sub」は、宣言ステートメントを表すステートメント名なので「式じゃないもの」です。
最後の「End」は、フロー制御ステートメント(実行可能なステートメントの一種?)を表すステートメント名なので「式じゃないもの」です。

  

まず、このように、細かく「式か、式じゃないか」の「区別」がつくことがすごく重要です。

理由は「エラー解決」のときに、

「これは式だから」「あやしい」とか、逆に「式じゃないけど」「あやしい」とか、

『 この流れだと「式じゃないものはチェックする必要はない、あるいは、ありえない」から、チェックしなくていい。時間の無駄が省ける 』、

『 この複数の単語の部分は「式じゃないもの」の集まりだから、当然「式じゃないもの」のままだよね。だからチェック不要(or 逆にチェックが必要、とか)』、

といった判断が付きやすくなります。

  

ロジカルな思考をするのに役立ち、エラーの原因の「あたり」をつけるのにも便利だったりします。
結果、エラー解決が速くなります。
また、文法の理解の速さもアップでき、上達が早まる傾向にあります。

  

そして、「式か式じゃないか」は、ウォッチウィンドウにドラッグで放り込むだけですぐにわかるので、
その意味でも、管理しやすくなり、
「ステートメント」を構造化?的にとらえやすくなり、
ひいては、
「ここからここまではこれに関する記述だからOK(or 関係ない)。切り分けて考えられる。」とか、
「”ここからここまで、何言ってるかわからない・・・”ということが減る。」とか、
そういったメリットが増えてきます。
  
(※「式じゃないもの」は「値と型が」、プログラム開始から終了まで、
  一回も・一瞬であっても決まらないから。
  また、文法に外れた、「まったくおかしな1語や複数語句」は、
  ウォッチウィンドウに放り込んだ瞬間にエラーになることが多いですから
  「あ、この部分だけだと文法的に間違ってる内容なんだ。じゃあ、
   もう少し、この辺まで選択して(or 削って)放り込んでみるか」と
  すぐにわかります。
  そういうことからも、色々と、短時間にわかります。)

  

ステートメントの1行あたりが長くなればなるほど、そのようなメリットが生まれます。

なので、今回の表を作りました。
  

  

いま、自分が扱っている、あるいは着目している部分(単語1語、あるいは複数の語句)が、
「式か式じゃないか、どちらなのか、そして、このステートメントの中でどういう位置にいて、他の学習項目とどういう位置関係なのか」
など、「自分が今居る位置」をある程度明確にすることで、
「次に何をしたらよいか、何をしたらよさそうか」の「あたり」を付けることにも役立つと思います。

また、
「式も式じゃないものも、どちらも、”組み込み”と、”自作可能なもの”がある、」ということもわかり、
「VBAの広さがどこまでなのか」も明確になるので、
「ああ、いま、ここやってるから、ここまでか。」とわかり、
「だだっ広くて訳が分からない」ということも減ってきます。

  

「Call」はこの表のどこにあてはまる?

「Ctrl+F」で検索したら、「ステートメント名」に載ってるから、「あ、イエロー部分」だ、=式じゃないもの、か。

「少し左見ると、”値を返さないタイプのモノ”って書いてある。値を返さないってことは型も無いな。チェック未対象だ」

「なるほど、ステートメント名には、フロー制御系、定義(宣言)系、テキストファイル制御系、フォルダ操作系、ハードウェア操作系、など、各種ある」のか。

「基本、ステートメント用のキーワードは、何も返しません」なのか。ならエラー調査の必要はないよね。

「ヘルプ読むとCallステートメントもフロー制御ステートメントと書いてあるな。Endもフロー制御系だったから仲間か~。フロー制御ってそういうことか」。

「なるほど、式じゃないものの仲間にはデータ型の名前やメソッドの一部(値を返さないもののみ)もあるんだな。」

「それら以外は”式”の可能性があるから、値と型のリレーを間違えるとエラーになるね。なら、チェック対象だ。」

「じゃあ、Msgboxは値を返すから、性格が当然異なるモノだよね。型が想定外の意外なものになってないかチェックしよう。」

「メソッド」とかは「主にオブジェクトを動かす命令単語なんだ。一般データはほとんど動かさないんだな。

「データの型の名前」はどっちも動かすのに使うんだな。

「値と型があるものは絶対チェック対象だ」

とか、
そんな感じのことがわかります。
(特に、初心者のうちは、「型」のリレーミスによるエラーがほとんどなので。
 ヘルプにも書いて無く、ウォッチウィンドウでしか「型」が分からないことも結構あるため。)

  
  

また、「式」のほうを見ると、
『 「式」を構成する要素」』のところに、

「操作対象(=変数やリテラル値やオブジェクト式)」と
「操作対象を動かすための「命令単語(=キーワード)」のうち、値を返すタイプのモノ」

とあるのですが、

「操作対象を動かすための「命令単語(=キーワード)」のうち、値を返すタイプのモノ」とは
「命令単語1語のうち、、値を返すタイプのモノ」
という意味でもあるので、
『 あ、そもそも、「式」では、値を返す命令単語を扱うことが多いんだな 』ということがなんとなくイメージできます。

(※もちろんすべてがあてはまるわけではありませんが。今回の表は、「おおむね」「その傾向」、ということを表しているだけで、完全に区分けできるわけではありません。)

  
  

そういったことの積み重ねで、短期間に、エラー解決の腕が上がる傾向にある、
そういう方向を向ける準備が整いつつある、そういった状況にもなれやすいです。

今回の表はそう言ったことに使ってください。
  

この表には何も書いてありませんが、それぞれのセルに、具体的な命令単語の例をご自分で書き込むと、
さらにもっと、VBAの全体像がつかみやすくなるかもしれません。
https://euc-access-excel-db.com/00000WPZIP/vba-study-table.zip
をダウンロードして、中身の「ステートメント要素new01.xls」を開くと、書き込めます。
書き込んだあとは、ご自分で「Ctrl+F」で検索すれば、どこに属するのかもどんどん再確認しやすくなります。

(※ダウンロードできないときは、右クリックで「名前を付けて保存」などで「継続」などでダウンロードしてみてください)

  

==============================

今回も一応表の外側の説明を貼り付けておきます。

「キーワード」についてです。

「予約語」でWeb検索すればいいと思いますが、それ以外の情報として、ご参考にしてみてください。
(※「キーワード=予約語」とわかるまでの僕の迷走の記録です。)

※ 「キーワード」 とは?

「キーワード」とは・・・、

(a) 基本、VBEにての、F1キーの押下でヘルプページが出てくるモノ(=F1キー押下に反応するモノ)、
(b) F1キーの押下に反応しなくても、ステートメントの中に実際に書く単語で、かつ、ヘルプにも載っているモノ、
(c) (F1キー押下には反応しないけど) 以上のキーワードと性格が同じ、自作の命令や設定値、データ型名、イベント名、など、・・・のこと、

と捉えてよい(=キーワードに含めてよい)」と思います。

つまり「キーワード=変数やリテラル値以外の、すべての命令や設定値ととらえてよい」、という感じです。

ヘルプを読むと、「何が ”キーワード ” なのか?」や、「どこからどこまでがキーワードなのか?」が分かりにくいのですが、
逆に、ヘルプやウォッチウィンドウやオブジェクトブラウザなどを読みやすくするためには、「あえて」で、
「キーワードとは、VBAの中において、ステートメント内に実際に記述する、 ” 命令単語 ” ・あるいは ” 設定値単語 ” という
意味合いをもつ、すべての語句・単語」と考えてよいと思います。
(※また、「命令単語」とは、「=何かを動かせる命令単語のこと=何かを加工できる・処理できる・ゲットできるetc、の、
そういう命令単語のこと」、というイメージで捉えて頂いて大丈夫だと思います。)

つまり、VBAの場合は、世間一般常識的な、「キーワード=重要語句」という意味ではなくて、
「キーワード=VBAで使える、すべての命令単語や設定値単語」 という感じになります。

特に「ヘルプ」の中では。
(そう明記はされていませんが、でも、そういうニュアンスで書かれていますし、
実際、そう考えたほうが、「 迷いが ・大幅に減り 」 、ヘルプが読みやすくなります。)

なのでそこには、 演算子、全ての関数(Excel固有、Office共通、API、その他、等々、すべて)、
オブジェクト名、プロパティ、メソッド、ステートメント名(各種ステートメント用の単語)、
各種組み込み定数、引数名、イベント名、などが含まれます。
(ムリヤリにでもそう含めて考えていいです。)

なので、更に 「意訳」して、自作の関数、オブジェクト名、プロパティ、メソッド、プロシージャ
(Callキーワードやドットで呼び出せるモノ)、定数、引数名、なども、「自作キーワード」として
位置づけてもよいと思います。

将来、クラスモジュールをバンバン作るようになって、 「そのような考え方が間違いだと思えるようになるまで」、
上記のような考え方で通して問題ありません。

もちろん、クラスモジュールをバンバン作るようになっても、
「そのような考え方で大体はイケル!とも思いますので」、もしそうなら、なおさら、それで通して問題ありません。

もちろん、「それは違う」と明確にできるなら、そう直せばさらに問題なくなります。

このあたりのことは、「VBAのレジェンドですら」、「かなりいい加減な説明に終始しています」。

例えば「VBAエキスパート試験」の古いほうのテキストなんて、「超・いい加減」です。

ここでのこ説明が「良い」とは言いませんが、少なくともそれと比較しても「劣ってはいない」と思いますので、
以上のような考え方・捉え方で問題ありません。Excelが出て、これまでの20年以上、「この部分について」
自著や自サイトで「超」いい加減な説明しかしてこなかった彼らが、今更、何か言えた義理ではないですし、
ここで書いている「意訳的なこと ・こじつけ」、「ダサさ」、「説明ミス」、など、
彼らのいい加減さに比べたら全然「可愛いもの」です。

あと、とっても大事なことですが、「キーワード(=すべての命令単語)」は・・・・、つまり、すべての、
演算子、全ての関数(Excel固有、Office共通、API、その他、等々、すべて)、プロパティ、メソッド、
ステートメント名(各種ステートメントを用の単語)、各種組み込み定数、引数名、イベント名、自作のそれら、などは、
どれもこれも、
『 全部をひっくるめて考えた場合 』、
そもそも、大別をすると、

①文字系の一般データを返す動きしかしないタイプのモノ、 
②何らかの動き(処理)をしつつ、同時に、文字系の一般データを返す動きもするタイプのモノ、
③オブジェクトを返す動きしかしないタイプのモノ、       
④何らかの動き(処理)をしつつ、同時に、オブジェクトを返す動きもするタイプのモノ、
⑤何も返さずに、何らかの動きだけをするタイプのモノ、の、

この5つのタイプの「どれか」に「あてはまります」。
(引数や既定値が「ある・なし」、あるいは、その他の性格も含めて。)

それぞれ「動かす対象となる ” モノ ”や、使う ” 場面 ” 、 ” 書き方(構文の構造) ” などが異なる」ので、
そのため、それぞれの呼び名が異なるだけで、本質的な「動き」の部分を見ると、
ほぼ、この5つのタイプしかなく、このうちの「どれか」に「あてはまります」。

この考え方、くくり方、は非常に重要です。

ヘルプやオブジェクトブラウザやウォッチウィンドウなどが読みやすくなるためです。

なお、「何らかの動き」とは、計算・条件別集計したり、比較したり、変換、ソート(並べ替え)、
結合や分離、転記、切り取り、外部データ接続、吸込み、メッセージ表示、開く/閉じる、コピー、
削除、検索、置換、フィルタ(抽出、絞込み)、グラフ作成する、・・・などのことを指します、
というわけで、上記の表の「キーワード」の部分 (パープルの部分を除いた、
グリーンとイエローの部分) に限ってですが、そのうち、 『 式じゃないもの (イエロー部分) 』 には、
⑤だけがあてはまります。  

一方、『 「式」を構成する要素 (グリーン部分) 』 の方には、①~④があてはまります。

  

  

  

今回は以上です。
  

==========================================================================

バックナンバー目次とサンプル号

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
----------------------------------------------------------------------