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

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

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

Vol.0044

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

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

  

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

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

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

  

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

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

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

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

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

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

  

という意見もあります。

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

  

  

今回ご説明する表↓

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

  

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

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

  

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

  

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

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

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

「ステートメント」とは、「命令文」「文章」と訳すといいです。

つまり、
「プログラムコード」「そのもの」ですが、
「ステートメント」自体をちゃんと説明していない市販書籍やWebサイト、動画、が多すぎて、
「特に」
「ステートメント」と、ステートメント用の「キーワード」を、
「ごっちゃ」にしていて、
「ヘルプ通りに説明しない」、
そういう市販書籍やWebサイト、動画、が多すぎて、
VBAの上達を阻んでカモにしているように映るので、
是非、
せめて、
「ステートメント」と、ステートメント用の「キーワード」の区別くらいは
分かるようになって頂けたらなあと思います。

  

いきなり、超長く話を逸らします。
本当にごめんなさい!!

  

なので、
『 ステートメントを構成する「式 or 式じゃないもの」の 構成要素 』
https://euc-access-excel-db.com/00000WPPDF/statem-elem-new01.pdf
の表の説明は次号に持ち越します。

  

文句ばっかり書きますが、どうかお許しください。
でも、
「VBAを他のオブジェクト指向プログラミング言語の学習の事前練習にしたい」
と思っている人は必須の内容だと思います。

  
  

では、進めます。

「ステートメント」の話でしたね。
  

VBA業界では、
ExcelVBAのエキスパートの公式テキスト(旧版)ですら、
そこ(ステートメント)の説明がメチャクチャです。
(バカすぎる。20年以上も変わってないから。)

  

ExcelVBA公式テキスト(旧版)の53ページを読んだとき、そのメチャクチャさに呆れ、
「そらExcelVBAユーザーがバカにされるわけだ」と思いました。

  

なお、ステートメント用の「キーワード」とは、命令単語(予約語)の一種で、
「Sub、Function、Dim、Let、Set、End、On Error、For、If、・・・」などの
ステートメントの性格を決める命令単語のことを指します。

ヘルプでは「ステートメント名」と称されている場合もあります。

これはExcel2007と2010のヘルプじゃないと書いていないかもしれません。
(当方で説明しているヘルプは基本、2010「以前」のヘルプです。わかりやすいので)

また、大々的に使われているわけでもありません。

「ステートメント名」という語句は、
例えば2010以前のヘルプで検索すると、
「キーワード」
「Deftype ステートメント」
の2件でしか出てこないっぽい(ヒットしない)ですから。

でも、僕は
「ステートメント」とステートメント用の「キーワード」との違いを説明するのに
わかりやすいので、「ステートメント名」という用語を使っています。
  

なお、ExcelVBAのヘルプ(特に2010以前の優秀なヘルプ)では、
「Sub、Function、Dim、Let、Set、End、On Error、For、If、・・・」という
単語たち自体は「キーワード」と呼ばれ、
例えば「Subを先頭に書いた命令文」は、「Subステートメント」と呼ばれ、
「単語」と「文」を明確に区別しています。
基本的にどの文脈でもそうなっています。

逆に言うと、
「Sub、Function、Dim、Let、Set、End、On Error、For、If、・・・」たち
を「キーワード」と称しないと、

「ヘルプが読めません!★★★」
  

他のオブジェクト指向プログラミング言語でも、「キーワード」と呼ばれていることが多いと思います。
多分、ですけど・・・。
他の言語でも「予約語」のことを「キーワード」と呼ぶので。

  
  

ヘルプが読めねば、「どんどんズレてく」一方です。

  
  

VBA業界の先駆者・レジェンドたちはそれを「とことん」「サボりました」。

  

「学習者がヘルプを読めるように、”自立”できるようにするには、どう理解したらいいか」、を、
「わかりやすく解説するということを。」

  

Excelが出て、20年以上。

  

VBA業界の先駆者・レジェンドたちの追随者たちも。

  
  

ちなみにですが、

「ステートメント」は
「ステートメント用のキーワード」で始まる(それを先頭に記述した)、
「命令文1行分や、命令文のブロックのこと」を指します。

それに対してステートメント用の「キーワード」(=ステートメント名)は、
その先頭に書かれた単語だけ、を指します。
多くの場合。
(Do...Loop、For Each...Next、If...Then...Else などは別にして)
  

両者は、あきらかに、「意味の異なるモノ同士」なのです。
  

ステートメント用の「キーワード」(=ステートメント名)は、
「ステートメント(命令文)」の一部です。
(多くの場合は先頭の語句のみ。If文やFor文などのブロック形式なモノは違いますが。)

そしてステートメントの性格を決めるものです。
  

※ご注意・・・実は「(先頭の語句のみ)」だけではない点について
「If...Then...Else ステートメント」では
「If、Then、Else」がステートメント用の「キーワード」となります。
そのように、1語だけではなくて複数の語句を含むステートメント(命令文)もあるので、
「1語だけではない」「先頭の語句のみだけではない」と思っていてください。
  

なお、ヘルプではステートメントは以下のように定義されています。

「ステートメント」
コード内で任意の操作、宣言、および定義を行うための、完結した構文を持つ最小単位。
通常は、1 行に 1 つのステートメントを記述します。
ステートメント同士をコロン (:) で区切ると、1 行に複数のステートメントを記述することができます。
また、行継続文字であるスペースとアンダスコアの組み合わせ ( _) を使うと、
1 つの論理行を 2 行以上の物理行に分けて記述することができます。

「完結した構文を持つ最小単位」ですから、「命令単語1語のこと」を指してはいません。

そして大きく分けて以下の3つの種類のステートメントがある、とヘルプには記載さてれています。
・宣言ステートメント(SubとかFunctionとかDimで始まるものなど)
・代入ステートメント(LetやSetで始まるもの)
・実行可能なステートメント(If、For、With、Callで呼び出してエラーにならないもの、などなど、たくさん。)

※「C#」というプログラミング言語は別の区分けになっています。
 プログラミング言語ごとにステートメントのタイプの大別は異なるようです。
 ↓以下、「C#」というプログラミング言語の場合です。
 https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/statements-expressions-operators/statements
 ↑また、これによると、「式」の意味もVBAとは異なるようです。
 
  

ExcelVBAのエキスパーの公式テキスト(旧版)などでは、
「ステートメント」と「ステートメント用のキーワード(=ステートメント名)」は
区別されずに、ごっちゃになっています。

例えば53ページに、

『 ステートメントとは、操作の対象(オブジェクト)に対して何かを働きかけるのではなく、
 マクロの動きを制御するなど特別な用途に使われる命令です。
 プロシージャの先頭に記述する「Sub」も、Subステートメントというステートメントの
 ひとつです。』

とあり、99ページにも

『 ステートメントは、条件によって処理を変えたり、同じ処理を何度か繰り返すなどして、
 マクロの動きを制御する働きをする命令です。』

とあり、
あたかも、「文のこと」ではなく、「命令単語1語のこと」を指したと誤解させられる解説
がなされています。
これが独学者だけではなく、お金を払って習っている人にも「誤解・迷い」を生じさせます。

結果、それによって、「オブジェクトブラウザを扱えなくさせられ」ます。

確かに「ステートメント名」には、
「関数やメソッドのように何らかの動きだけをするもの」
(=ChDirや Kill、AppActivate、Beep、などのようにコマンド的でオブジェクトブラウザにも載っているモノ)もあるので
「命令単語1語のこと」の性格を持つものもあります。

でもそれでも、その場合であっても、例えば「Beep」などは、「命令単語1語で1文となっている」という感じにちゃんとなっているのです。
「文」とその中の構成要素の「一つの単語」は、同じものであるはずがありません。

そういうのもごっちゃにして、ちゃんと説明せずにけむに巻いています。

これも、それによって、オブジェクトブラウザを扱えなくさせられます。

引いてはヘルプとの連携もできなくさせられます。
(VBA的にバカのままに陥れられ、成長できなくさせられます。カモられているかのようです。)
  

とても参考になるサイトでさえ、
https://www.relief.jp/docs/excel-vba-what-statements.html
「狭義の」「ステートメント」の解説として
その「無分別」について載っていますが、
それを「無分別」のまま覚えてしまうとかえってVBAを覚えにくくします。
とりえあずヘルプを読めなくさせられます。

「他のプログラミング言語」との「比較」の意味からも「混乱」しか招かないからです。
「他のプログラミング言語」の「ステートメント」には「広義も狭義も」「ありません。」

それに、そもそも、前述したような、
「なぜ、Excelの昔からの(優秀な)2010以前の ”ヘルプ”の記述を紹介しないのだ?」、
とも思ってしまいます。

正直、
「狭義とか広義とか」で、「混乱や誤解を必ず招く説明」であるにも関わらず、
それを「正当化・ごまかし」しないでほしいなとも思います。
「どちらも間違いではない」なんて、僕ら初心者には迷惑なだけです。

  
  

いずれにしましても、
「ステートメント」=「文」(1行単位、あるいはブロック形式単位の。)、
であります。あくまでも。

そして、
「ステートメントの先頭の単語」(あるいは、ステートメント内の複数の予約語単語)
=「決して”ステートメント” なんか ”じゃない ”!!!!」
=「ステートメントの ”構成要素 ”の一つ」
=「ステートメント名」
=「ステートメント用のキーワード(=予約語=命令単語)」、
=「ステートメントの性格・意味を決めるモノ」、

という風に理解するほうが、
VBAの上達が早いのだけは、確実で間違いの無いことだと思います
他言語でもおおむねそうだから。

  

※ちなみにですが、
『 VBAに存在する一部のメソッドのようなステートメント名 』は、
「ステートメント名」であるにもかかわらず、
オブジェクトブラウザに載っていたりします。もうムチャクチャ。VBAは。
節操なさすぎ。
(オブジェクトブラウザには通常、プロパティ、メソッド、
 関数、列挙+定数などしか載りません。
 ステートメント名自体は載らないはずなのです。)
そして「ステートメント名」の位置づけなのに「メソッド」として扱われています。
で、
そのような「ステートメント名」には、例えば、
AppActivate ステートメントの「AppActivae」や
SendKeys ステートメントの「SendKeys」、
FileCopy ステートメントの「FileCopy」、
Beep ステートメントの「Beep」、
などがあります。

これらは「ステートメント名」なのに、
「プロパティ、メソッド、関数、列挙+定数」などしか載らないはずの、
「オブジェクトブラウザに載ってしまっています。

しかも、「メソッド」扱いであるがため、「Call」で呼び出すことすらできてしまいます。
例えば、
Call Beep
とか、
Call AppActivate("TeraPad")
みたいな感じで。
エラーになりません。
「これってほんとにステートメント名?Callで呼び出してエラーにならないなら関数じゃん!」って思わされます。
なので、「ステートメント名」も「命令単語の一種」と考えても何ら問題はありません。

これらの命令たちは、
「OSをオブジェクトと想定してなのか?、OS寄りの命令」たちであるように、
ぼんやりと目にうつってきます。
ステートメント名と呼ばれるもののうち、OS寄りの命令たちが
メソッドとしてオブジェクトブラウザに載ってしまっている・・・、
という風に、ぼんやりと、目にうつります。

結局、
「ステートメント名」は「命令単語」と大きく捉えてしまえば、
「細かい」「境目」を気にする必要は無くなります。
そして「ステートメント」はその命令単語を含んだ、「文」です。

なお、「ステートメント名」がそんな「カオス」な「状況」になっている理由は、
『 昔の「Basic」言語の名残り・・・』、
みたいな説明もあるようです。(詳しくは僕も知りません。)
  

が、とりあえずそれも気にしなくていいと思います。

BASICやVBAの歴史は特に気にせず、
VBAに限って言うと、

VBAにおける「ステートメント」というものには(他のプログラム言語とは違って)、
「本来は純粋に”文”という意味が基本だが」、
「でもそれだけではなくメソッドめいたものまで存在しており」、
「つまり、性格に一貫性がない・性格が統一されていない・節操がない」、
わけだが、
ただ、しかし、
それはそれで置いておいて、
結局のところ、
「ステートメント名=ステートメント用のキーワード=ステートメント用の予約語」
は、
れっきとした、
「命令単語の一種だ!」と、
大きくくくってしまえばOKです。

そして、
「VBAはもともといいかげんだから」、
「ステートメント」という「言葉」に「縛られる必要はない」、
「マイクロソフトはステートメントはもちろん、ステートメント名の性格をも、ちゃんと分けるのをサボったんだな。いいかげんな言語だ。」、
と、こっちで勝手に決めてしまえば、
「ステートメント名(ステートメント用のキーワード)がオブジェクトブラウザの中に ”メソッドとして”入ってしまっていること」、
つまり、
「オブジェクトブラウザの内容がおかしい!変!」ということも「スルーできる」「無視していい」ので、
VBAの理解が速くなると思います。
「命令単語の一種なんだから」。
  

いちいち、広義、狭義、などと考える必要はなく、
いちいち、広義、狭義、などと「苦しいこじつけ」をする必要などなく、
以下のように考えればOKなわけです。

(01)
『 「ステートメント」は、どんなプログラミング言語でも「文(=命令文。複数語句の集まりでできた命令文。)」と言う意味。』

(02)
『 VBAの場合、Sub、Function、End、If、Beep、Copy、Loop、などは
  全部ステートメント用の予約語。
  イコール、ステートメント用のキーワード。
  予約語=キーワード。
  したがって、
  Sub、Function、End、If、Beep、Copy、Loop、などは、
  「ステートメント」、ではない。
  広義とか、狭義、なんて、ない。
  それはVBA講師たちが、
  自分たちが正しく調査・説明してこなかった「怠慢」を
  正当化するためのこじつけ。』

(03)
『 マイクロソフトはバカでいいかげんだから、
  「AppActivae」や「SendKeys」「FileCopy」「Beep」、
  などの「OS寄りの動作をする」「本来はメソッドとすべきもの」まで、
  勝手な都合で「ステートメント」に含めているだけにすぎない。
  あいつらの「勝手な仕様」なだけ。
  なので、そんなのに理由はない、理由はいらない。
  オブジェクトブラウザ上ではメソッド扱いだろうが
  もともとがステートメント扱いだろうが、
  マイクロソフトの勝手な都合主義・もともと理由やカテゴリなんてないもの
  にユーザー側がいちいち合わせるのは時間のムダ。
  この件に関してだけは「動けばいいんだから」どっちだっていい。
  それを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つの表を連動させて見てみてください。
何かのヒントになれば幸いです。

  

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

前置きがまたもや長くなりすぎました。

すみません。

本文は次号にします。
  

  

  

今回は以上です。
  

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

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

★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):~バックナンバー~

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