★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0051:すべての基本(ヘルプ読解含)。「自作関数」について04 ~ 「VBAの悪しき”省略”について一部を少し・・・」+「値型、参照型」 について ~
バックナンバー目次ページは→こちらです。
まぐまぐのページは以下です。
https://www.mag2.com/m/0001691660.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
Vol.0051
タイトル:★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0051:すべての基本(ヘルプ読解含)。「自作関数」について04 ~ 「VBAの悪しき”省略”について一部を少し・・・」+「値型、参照型」 について ~
バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
今回も「悪しき省略」と少し関係があります。
今回お話することは、
『「クラスモジュール(=VBAの真の基礎)」すらも大してちゃんと作れない 』・・・・・、
『 超簡単なモノをほんの少ししか作れない) 』・・・・・、
という、そんな「僕」で「さえ」も「気づく」「こと」なのに、
なぜその「こと」を、
VBAレジェンドやそのチルドレン、出版社、ライター、講師、Youtuber、たちが、
「★気づかないフリ」してるのか、
「どーせ教えても分かんないだろ?と思ってる」のか、
何なのか分かりませんが、
「なぜちゃんと教えないのか?」、という疑問を持ってほしい・・・、
というか、
『 あなた方ちょっとおかしくないですか? 』
『 なんで20年以上もそういう「こと(=「真の」基本など)」を教えないで放置なの?』、
という疑問を皆さんにも抱いて欲しい・・・、
と思ったので書きました。
「自分で推測して調べて進む力を削がれる」、その原因のひとつ、かもしれません。
また、僕は、
もちろんそもそもVBA業界だけでなく、Excel業界全体が、
「SQL(データ管理の世界標準の基礎。Excelの基礎ではなくて。)」なども
教えて来なかったせいで、
Excelでの「数値管理の現場」が、軽く10年分は遅れたのではないか???
という疑問、不信感、を持っているので、その意味もあります。
「彼らに、本当のことを教えてもらえているのか何なのかよく分からない」という
「もやもや」を、
もうこれ以上味わいたくないし、
彼ら自身にも、
「もういいかげん、変わってほしい」、
という願いで描きました。
正直、
Excelが出て「20年以上もあったんなら」、
本当なら今ごろは、
ExcelVBAの初級レベルでは、
いつまでもループプログラミングによる、
「表だけ」、しかもその「一部だけ」の処理ではなく、
SQL処理および、
そのほかに、グラフによる見える化や、
販促や企画などとからんだケーススタディのVBAなどが、
もっともっと盛んになってないといけないはずなのです。
PoweBIとか。
そもそもSQL(MicrosoftQuery など)だけでも教えてくれてあれば、
・こんな無駄なフィルタ要らない、
・こんな無駄なワークシート関数要らない、
・こんな無駄なパワークエリ要らない、
・こんな無駄なVBAプログラミング要らない、
と、
「無駄なそれら」が最低2割くらいは削減出来てたと思います。
今でも大体2~4割くらいは、無駄なそれらが削れる可能性が高いです。
場合によっては(レアケースになってしまうかもしれませんが)、
5割(半分)以上削れる場合もあると思います。
その可能性は高いです。
下手したら7割くらい、とか?
「無駄なそれら」が、削れる可能性があります。
もちろん、
「Excelを使って」、
「いろんな条件での」、
「集計」、
をしてなければダメなんですけど・・・。
表作るだけで終わってたらそこまでの削減はできませんが・・・。
(そのほか、地図とか申請書やマニュアル作りばかりに使ってて、
計算に使ってなかった場合もダメ、という意味です)
というわけで、
以上に書いたような、
「SQLやらグラフやケーススタディの学習やらなんやらかんやら」の
書籍などの出版その他を、業界の人たちにはもっともっと、やってもらって、
改善していって欲しいという願い・希望を込めて、
今号だけでもでなく、今後も、全号、書いていきたいと思います。
(いちおう、これまでもそういうつもり、でしたので・・・・。)
=======================
では、今日の話題です。
今日は支離滅裂です。
何もまとまっていません。
「値型、参照型」、という用語などについて書きます。
詳しい解説ではなくて、「入口」?に少し関係があるような、無いような・・・・、
という感じのお話です。
でも、
「VBAの超初級を脱したい人」にとっては、
重要な部分だと思います。
前回は、「Let」というキーワードの省略について少しお話ししました。
今回は、それにからんで、
「値型、参照型」、
という、
「(VBAを含む)オブジェクト指向プログラミング」に欠かせない用語について、
少しだけ、入り口だけ、お話をしたいと思います。
自分は、
「Letの省略」が分かったおかげで、
とりあえずしばらくのあいだ「Let」を書くようにしてみたのですが、
以外に、それが「起点」となって、
「いろんなことへの広がり」、
がありました。
(いまでもちょいちょい、Letを全部書きます。なんかきれい(見た目が)、なので。)
例えば、昔、
(といっても4、5年前ですが)、
コードの中に「Let」と「Set」が仲良く並んでるのを実際に見てみて、
そして
「Let」と「Set」の、
「それ以外のモノが無い」、
という事実をみて・・・、
もしかしてVBAの「データ」には、
「大別すると」、
一般データ系とオブジェクト系の
2つしか無いのでは?・・・、
ということに気づきました。
まあ、誰でも気づくとは思いますが。(^^)
でも、それが意外と
「大きかった」
のです。
その後、VBAという言語を自分なりに整理することに、
いろんな意味で、とても役に立ちました。
ヘルプが読めるようにも、オブジェクトブラウザが読めることにも、すごく貢献しました。
ウォッチウィンドウの「利用意義」「価値」も少しずつわかるようになりました。
「誰にも教わらずに」です。
Web検索は、別の言語のことなどを検索しましたけど・・・。
(※オブジェクト指向プログラミング、関連の調査として。)
結果、僕にとっては、まったく「小さくなかった」のです。
まあ、「未だに、VBAの完全な」「初心者」ですから、「大きかった」のはあたりまえ・・・、なんですが(^^)。
そしてさらに、その、
『 もしかしてVBAの「データ」には、「大別すると」、
一般データ系とオブジェクト系の2つしか無いのでは? 』
ということが、
『 値型、参照型に、「通ずるヒント」なのでは? 』
と推測することにも、発展していきました
そしてこれまた他言語のWebページも調べてみたら、
「そんな感じになっていた」ので、
「あ、やっぱりそうなんだ」、
と確信を得ました。
最終的に、結果的には、その理解のしかたは「正しくはない」かったのですが、
でも
「十二分に」
「ヒントになった」、
という意味で、です。
確信を得ました。
ど初心者、ド素人なりに。
それでできたのが、
4、5号前くらいにご提示した以下の表たち(PDFなど)です。
●(a) VBAの主な「学習項目=ステートメント(ひいてはプロシージャ、クラスモジュール)を構成する要素たち」のイメージ
https://euc-access-excel-db.com/00000WPPDF/vba-learning-items-by-purpose.pdf
●(b) ステートメントを構成する「式 or 式じゃないもの」の 構成要素 (変数、定数、リテラル値、キーワード(=全ての・命令語句))
https://euc-access-excel-db.com/00000WPPDF/statem-elem-new01.pdf
●(c) (a)をベースにした、市販書籍がカバーしている学習範囲
(緑枠の中の半透明の黄色部分。割合が分かると思います。)
https://euc-access-excel-db.com/00000WPPDF/vba-learning-items-by-purpose02-beginner-book01.pdf
●(d) (b)をベースにした、市販書籍がカバーしている学習範囲
(緑枠の中の半透明の黄色部分。同上)
https://euc-access-excel-db.com/00000WPPDF/statem-elem-new01-02-beginner-book01.pdf
●(e) 「x+y=z」を表す「自作関数」についての基本や「超重要」な知識
https://euc-access-excel-db.com/00000WPPDF/xyz-function_basic01.pdf
そしてもう少し調べると、
『 あ、
「値型」っていうのは、
データのコピーを使ってデータを操作することに関係する・・・、
そんなイメージで、
「参照型」っていうのは、
「データへのショートカットアイコン=つまり、”データへの参照 ”」を
使ってデータを操作することに関係する・・・、
そんなイメージなんだ! (「型」は「データ型」の意味ではなくて。)』
ということが分かりました。
そして
『 「値型」というのは、「ByVal」に関係して・・・、
「参照型」というのは、「ByRef」に関係する・・・
(「型」は「データ型」の意味ではなくて。)』、
ということも分かりました。
※前号の「関数」の「引数」の部分で省略されていた、「ByRef」と「ByVal」のことですね。(^^)
更には、
『 あ、
値型(データのコピーを使ってデータを操作するイメージ。=ByVal的なこと)と、
参照型(「データへのショートカットアイコン=データへの参照」を使って
データを操作するイメージ。=ByRef的なこと)
というのは、
それがそのまま、
「一般データ」と
「オブジェクト」、
という意味「ではなくて」、
一般データにもオブジェクトにも、どちらにも、
その両方に、
値型、参照型、としてデータを操作する方法ががあるんだ
(「型」は「データ型」の意味ではなくて。)』、
ということも、分かってきました。
『 でも多くのオブジェクト指向プログラミングでの既定の動作においては、
一般データはなんとなく値型的なイメージのことが多く
オブジェクトは基本、参照型的のことが多いんだな(その確定。イメージではなくて。) 』、
ということも分かってきました。
つまり、より、「ByRef」と「ByVal」のことや、
「オブジェクトのこと」が理解しやすくなりました。
更に、さらには(変な日本語)、
『 なんだ、VBA関数やExcel関数(ワークシート系含め)は、オブジェクトではなくて
一般データを処理することがメインで、
メソッドとプロパティはオブジェクトの操作がメインなんだな 』、
ということにも繋がっていきました。
(※あくまでも「メイン」、なので、「絶対」ではないです。)
『 VBA関数やExcel関数(ワークシート系含め)たちは、
「一般データを操作することがほとんど」で、
なんなら「ほぼそっち専用」、くらいの感じ。
逆に、”オブジェクトの操作をすることはほとんど無い”。
一方、プロパティとメソッドは、
「特定のオブジェクトだけに紐ついた」命令で、
その特定のオブジェクトを動かすため「だけ」に使われる。
つまり、「オブジェクト専用」。
ただし、オブジェクトに紐ついたままの状態で、
(でも)オブジェクト操作と一般データ操作の「両方が」できる、、、。、
つまり、「一般データ操作もできる」。
(ちょっとわかりづらくてすみません。) 』
というイメージです。
そしてそれは、
『 メソッドもプロパティ(一部)も、
「結局は関数(or関数みたいなもの)」なんだ! 』
という確信につながっていきました。
超簡単なクラスモジュールを作ってみたら、さらに確信となりました。
※「プロパティ(一部)」という風に、「一部」を付加したのは、
「プロパティ」とは、本来はオブジェクトが内包する「メンバ変数」であって、
「関数ではない」からです。(=名詞的)
でも、「関数(SubプロシージャやFunctionプロシージャ)と同じ仕組み」の、
「3つのPropertyプロシージャ」を使うことで
「プロパティ」を自作することもできますし、
「関数(=動詞的)のような」そのような性格の
「組込みのプロパティ(=動詞的)」も多いので、
「一部」と付加しました。
※オブジェクトが内包する「メンバ変数」とは、
例えば「オブジェクト」を「液晶TV」という「装置」に例えると、
その
「特徴(筐体=ガワの色や大きさなど)」の値、や、
「状態(チャンネルや画面の色合いや音量設定など)」の値、が、
「メンバ変数」に相当します。
「特徴(筐体=ガワの色や大きさなど)」は基本、書き換えできないですから
「値の参照しかできないプロパティ」のイメージで、
「状態(チャンネルや画面の色合いや音量設定など)」は設定もできますから、
「値の参照と設定(=書き換え)ができるプロパティ」のイメージです。
なので、つまりは「メンバ変数」とは、
「装置」の「各種のスペックの値や設定値」みたいな意味あいです。
「メンバ変数」は、結局は「値」が格納された「変数」のことで、
VBAに限らず、「自作のオブジェクト(≒クラス)」では、
リテラル値ドンズバだとプロパティとして扱えない仕様になっているので、
変数の形で「設定値ですよ」とみなしている・・・、くらいの理解で、
最初のうちはOKだと思います。
また、「メンバ変数」の「メンバ」とは、「オブジェクトに含まれてますよ」という
意味合いで「メンバ」が付加される・・・、
くらいの理解で、最初のうちはOKだと思います。
単に「変数」と書かれていたなら、
VBAの場合に限れば、標準モジュールやシートモジュールなどの
「変数」のことだな、と理解すればいいですし、
逆にわざわざ「メンバ変数」と書かれていたら、
『ああ、「クラスモジュール(=自作のオブジェクト)」に含まれる「変数」だと
あえて強調したいんだな 』、くらいに意識すればOK・・・、
という程度の解釈でいいと思います(最初のうちは)。
そして、
それでオブジェクトブラウザとウィッチウィンドウやヘルプが、
それまでの自分よりも、
「はるかに」、
読めるようになりました。
Letの「省略」のことを知らなかったら、
そういう気づきもありませんでした。
「次々と、自然に、確認したいことが出てくる」、ということもありませんでした。
もちろん、これらはすぐに全部気づいたわけではなくて、
それなりに長い時間がかかりました。
理由は、
そもそもレジェンドたちやそのチルドレンたち、ライター、
出版社、Youtuber、たち、
そういったダメな人たちやダメな組織たち
(=ちゃんと教える気がまるで無い人たちや組織たち)
の情報にはまるでこういう情報が無くて、
「正しいのかどうなのかが全く検証出来なかった」からです。
(ウォッチウィンドウのほうがちゃんとした情報をくれました。)
また、当時は、
それらの人たちそのものを、
「盲目的に」
「偉い人たちだ」と
「信じてしまっていた」
まあ、つまり、
「騙されていて」
「疑わなかった」、
からです。
いずれにしましても、
VBAの学習の場合、
レジェンドたちや、市販書籍、試験のテキストなどを、
「意味も無く」、
「信じ切る」、
「信じ過ぎる」、
「妄信する」、
と、
「まったく成長できません」。
それらが言う説明内容は、
『 覚えることが多いからという理由なのか、何なのか、
さっぱりわからないけれど、
最初のうちの、「やむをえない学習内容」という意味でなのか、
あえて真の基礎とは少し違うように形を変えて説明している。
(ほんとは変えてはいけないことまで変えて。)
それは、
他のオブジェクト指向プログラミング言語の学習者が見れば、
誰が見ても事実。
だから「妄信は禁物」。 』、
と、あまり信じすぎないようにしていたほうが安全です。
正直、
このようなことは、
(例えば「値型、参照型」などのことは)、
オブジェクト指向プログラミングを学習してれば、
中高生(下手したら小学生)でも知っている、
あるいは、
「理解できる」ことです。
でも、それを最初に教えてもらえない。
「無駄な」、かつ、「長い期間・時間」をかけて自力で調べないと、
(特に独学者は)確信が持てない環境にさせられている。
1時間もかけずに習える事を。
しかも
超、基本で、
超、大事な事を。
皆さんはどう思いますか?
そんなこんなで、
「値型、参照型」のことが分かると、前述のように関数の引数のByRefとByValの省略にも通じました。
繰り返しになりますが、
「参照型」は、ショートカットアイコンみたいなものかなと推測が立つようにもなりました。
結果、「C言語のポインタ」にも通じるのではないかとも思いきました。
(そうしたらそれも調べてみたら、やっぱりそんな感じだったみたいです。
あとから知ったのですが、
「苦しんで覚えるC言語」という市販書籍では、ポインタのことを、
Windowsショートカットアイコンの例えをしていました。
・・・と思ったら、今、Webにも同じ情報があることを知りました!
ビックリ!
https://9cguide.appspot.com/15-05.html
の、「すなわちショートカット」の
「Windowsのデスクトップに並んでいる、あのショートカットと同じです。」
の部分です。
まじビックリです!
この本買おうと思ってたので・・・。
このWebページのポインタに関する説明の、
「VisualBasic(=VBA)のSETステートメントなども同様と言って良いでしょう。」
も参考になります。)
これもあとになってたまたま知ったのですが、
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/excel-vba-osusume-books01
でもご紹介している、
「マンガと図解でスッキリわかる プログラミングのしくみ」
https://books.mdn.co.jp/books/3217303022/
にも書いてあります。
「値型、参照型」が分かれば、
なぜ「ByVal」と「ByRef」の「2つ」しかないのか?
なぜ「一般データ」と「オブジェクト」の「2つ」しかないのか?
などが、ある程度、早い段階で理解できます。
そしてこういう事を「他の言語」の学習者は教えてもらっています。
でもVBAでは全く教えてもらってません
VBAだけ教えてもらってない、のかもしれません。
(わかりませんけど。)
そしてそのせいで、
VBAの学習者は
「いつまで経っても」
「オブジェクト指向プログラミング」
のことはもちろん、
「VBA」自体のことすらも、
「全然整理できない ”無能のまま ”」、
「自分で推測して調べて進む力を削がれる」、
ことにさせられてしまうのです。
初心者本を読んで試したあと、次の少し上のレベルの本が「超難解」に見えてしまい、まるで成長できない・・・・。
Q&Aでいくら質問しても、なぜそういう回答をしてくれたのか、がいつまで経ってもわからない。
そんな状況にハマる、そんな「おきまりのパターン」に墜ちていきます。
結果、
『 なぜVBAの指導者たちは、
オブジェクト指向プログラミングを学習している人間なら
「誰でも知っってる」
「中高生でも知ってる」、
こうした基本的なことを教えてくれないのだろう? 』
と疑問を持つことになるわけです。
Let、その他の「省略」に気づかねば、
こういうことに
永遠に
気付けないわけです。
そしてそれを知っていて教えない。(のか?)
そう勘繰られても仕方がないくらい、
何もやってなくて、
「省略の悪」などについても教えてもらえないのが
現状です。
それで本当にいいんでしょうか?
業界の方々は・・・。
そんなことで。
もし僕がVBAのレジェンドだったら、
売れなくもいいので、
「使命として」
「使命感をもって」
そのような基礎の本を4、5冊は出す、かな。
もしくは、
ホームページで、自分の書籍の補助知識として、
「SQL」とともに、紹介するかなー、と思います。
今回は以上です。
==========================================================================
バックナンバー目次とサンプル号
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
----------------------------------------------------------------------