GoGoマクロのブログ

初心者向けマクロ講座「Go!Go!マクロ」の筆者三太郎の公式ブログです。

これは「できるプログラマー」の常識ですよー

2018-10-18 06:25:39 | VBAあるある

世の中は何事にも、単純に、常識的に考えたら分かることでも、
いざ、VBAのプログラミングになると、なぜだか常識外れのおかしな
考え方に陥ってしまう人が多くありますので、要注意です!

それで、IT業界歴25年、システム開発の裏の裏まで知り尽くした
ベテランSE(システムエンジニア)の私から言わせますと、
VBA界隈でよく言われている誤った常識の多さには前々から、
どうにも違和感を感じています。

2020年から全国の小学校では英語と共にプログラミングが必修科目
となるという日が、もうすぐそこまで迫って来ているわけですが、、

正直、このまま行くといづれはVBAで蔓延する可笑しな常識いうのが
小学生にさえも笑い者になってしまいかねない事態だと、

そんな危機感を持っています。

と言うか、今でも既にもう情報処理試験に合格するような優秀な
中学生プログラマーの間では、VBAが失笑されているとか・・・。
そう聞いていますので、これは早急に正していかないといけないな
と思っている次第です。

中でも、そんなVBA界隈の間違った常識で一番多い思いますのが
「変数名宣言の強制オプション」というものです。これの勘違いが
非常に多い。。

いいですかっ!

世の中のマクロ言語で(VBAも含めて)、変数名の宣言が強制
される言語というものは、ただの一つもありません!

VBAの場合にも、それはただの「オプション」に過ぎません。
Excelの歴代のバージョンでも、出荷時のデフォルト設定では必ず
OFFです。VBAはマクロの言語ですから、これは当然です。

ついでに言うと、以前にも言いましたVBAのお父さんに当たる
BASIC言語でも、そのまたお父さん(祖父)のFortran言語でも、
変数名の宣言いうのはまったく強制されるものではありません。

ついでに言うと、今、プロのプログラマーから一番人気の高い
言語であるPython(パイソン)という言語においても、そのよう
な強制はありません。それが、世の中の当然の流れであります。

ハードウェアの性能が著しく向上してきた今、昔ながらのDIM宣言
(即ち、dimensionでの領域確保)というものは、特に、マクロ
の言語(即ち、for Applications)においては、もはや、無用の
長物だと言っても過言ではない思います。(それ故に、VBAでの
Dim宣言いうのは「日付型」だけで十分だと、私は常々からそう
言っています。)

にも関わらずです、

本来、そのような強制をされるはずのないマクロ言語の一つである
VBA界隈だけで、そのようなマクロの歴史も知らないし時代錯誤
だし、な誤った認識が蔓延してしまったのか?

これは、全く持って由々しき事態だと思っています。


ちなみにですが、未だマクロ始めてないで知らない方も居るかと
思いますので念のため説明しておきますと、

「変数」とは、プログラム上のデータを入れておく為の箱で、
「変数名」とは、その箱につける名前のことで、
「変数宣言の強制」とは、こちらの「エラー対処方法」の
 Webページ をご覧ください。

 

で ここで、皆さんに問いたい思います。

変数名の強制オプションは使ってはいけません!
その理由がわかりますか?

 

これ、知らずにネットや参考書やセミナー等で誰かが振りまいてる
間違った入れ知恵を信じてしまって、
間違ったオプション使う設定をしてしまっている人が非常にこれは
多く居る、困った事態となっています。

なぜそれやってはいけないのか、今回はその理由の一つを詳しく
解説してみます。(理由沢山ある中の、まずはその一つ目です。)


それで、話はちょっとそれますが、

先日私、ちょっと歯が痛みまして実に10数年ぶりで歯医者さんへ
行ったんですが、

診察待つ間に暇だったので、待合室に置いてあった普段は決して
見る事のないビジネス雑誌を手に取って、何気なしにペラペラと
めくっていましたら、その中に

「できるビジネスマン10の習慣」

というタイトルだったかの特集記事というのが載っていまして、
1位は何かな?思って、その記事ちょっと読んでみましたところ、
その習慣の第1位に書いてあったのが、

「メールの相手の名前は必ずコピッペする。」

だったんです。

私としてはそれ、何も「できるビジネスマン」じゃなくても
それはごく常識的な、至って当たり前の話と思っていましたから、
有名雑誌の特集にわざわざこれ載せる程の話なのかな・・・?
とちょっと思った次第です。ですよね!?

要するに、それしない人だと(できないビジネスマンだと・・)
たとえば、相手の名前の「中田様」を「田中様」と打ち間違えて
メール送ってしまったりするわけですから、これは・・・大変に
危険行為ですね。ビジネスの世界では決してあってはならない、

実に恐ろしいミスです。。

そう言えば、以前に私にも、
「三四郎さん、いつもメルマガ読んでます!」ってなメールを
頂戴したことがありましたですが、、

うむ、「三四郎?」

このブログでもメルマガでも、これだけ毎回、三太郎、三太郎、と
わたし何度も何度も連呼して書いているにもかかわらずですよ、
それでもなお、私を「三四郎」って呼ぶ人があるわけです。(笑)

そうです、

人間いうのは、打ち間違えなどのタイプミスに加えて
「中田さんを田中さん」だったり、「三太郎を三四郎」だったり、
そのようなちょっとした勘違いが実に多い、間違うのが性分の
生き物であるわけですね。

それ故に、Excelデータの整理は間違えや勘違いは絶対にしない
機械で(マクロのプログラムを組んで)処理するというのが良いと
言い続けて来ましたわけです。

私の場合は実に温厚な人間(!?)ですから、名前を間違われた
くらいでは決して怒ったり気分を害したりはしませんですが、
その時の返事は、普段よりは気持ち短めの(そっけのない?)
メールをお返ししたかと記憶しています。(笑)

そういうことですから、

メルマガ筆者宛への感想メールであるなら間違っても大した
問題はないわけですが、これが、大切なお客様へとか、微妙
な関係の相手へとかだと、いきなりのメール冒頭での名前間違え
というのは致命傷(本文の内容の如何に関わらず・・・)、
著しく心証悪くしますので、間違いなく"アウト"ですよね。

だから、

必ず、メールの相手の名前いうのは、相手が自分でサインを
して書いてきた名前の部分からコピッペをする。
それは何も「できるビジネスマン」に限らずの、ごく常識的
な誰もの習慣なんだろうと、私はそう思っている次第です。
ですよね?


で、

それは何もメールを書く時に限った話ではありませんから、
プログラミングの場合でも、これは全く同様です。

要するに、

絶対間違ってはならない「変数名は必ずコピッペする。」
というのが、間違いなく「できるプログラマー」の常識中
の常識だと思います。

困ったことに、VBA界隈ではそのような変数名のタイプ
ミスを防ぐ為に「変数名宣言の強制オプションを付けろ!」
言ってる勘違いが非常に多く見られるワケなんですが、
それは間違いなく「できないプログラマー」の象徴ですね。

できる人は必ず、間違っちゃいけない名前の部分は
メールの相手の名前でも、プログラムの変数の名前でも
「コピッペする」ものです。できる人なら、その習慣
誰でも皆しっかり身に付いてる思います。

そんな、VBA界隈には多い「できないプログラマー」
勘違いをうのみにして、変数名宣言の強制オプションを
ONに設定してしまってる人は居ませんか?

もし、心当たりのある人は直ちにExcel開いて、デフォルト
のOFFの状態に戻してください。OFFですよ、OFF!
出荷時にデフォルトで設定されている通りの「OFF」です。

ちなみに、このオプションの正しいデフォルト設定への
戻し方も先ほどの こちらのページ にあります。


それで、そのような「できないプログラマー」のマネをして、
自分のタイプミスを機械に頼ったやり方をしている人だと、

メールのソフトで相手の名前のチェックなんかいちいち誰も
注意はしてくれませんわけですから、他のソフトの使用時に
必ず痛い失敗をする事になるわけです。だから絶対、名前の
チェックを「機械任せ」なんかにしたらいけません!

なので、名前は(メールの相手名も、プログラムの変数名も、)
必ずコピッペする癖というのを付けておくようにしてください。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ある一部のソフトだけに特有の機械的なチェックに頼っていると
よそでもっと大きな痛い目に遭いますよ!!

これも以前にも書きましたが、

人間、キーボードで手打ちをすれば必ず打ち間違えはするもの
です。タイピングがプロのデータ入力代行業者であっても、
保証される正打率(正しくタイピングする確率)は精々95%に
過ぎません。入力のプロでも100文字打てば5文字は間違う。。

なので、タイピングのプロでもない我々一般人は、仮にその
正打率が80%とすれば、5文字に1文字はミスをすることになる
わけなんですから、

これは、前回のスッキリ書きたいという話と同じで、自分の能力
を過信して(自分は絶対タイプミスはしない)思う方が間違いで
あるわけですね。何か実行結果がおかしいなと思ったら、まずは
自分のタイプミスを疑って、それ確認をすればいいというだけの
話です。

5文字以上の長い変数名を付けたのならば、必ずミスあると
思わないといけませんから、変数名はコピッペして使い回す
いうのが、間違いなく「できるプログラマー」の当たり前の
常識事であります。何でもかんでも強制する理由など、毛頭
ありません。

他のマクロ言語には、そのようなチェック機能いうのはありま
せん。自分自身でちゃんとそれチェックのできる当たり前の人
になってください。それ、他人(機械)任せに慣れてしまうよ
うだと、「できないビジネスマン」や「欠陥プログラマー」と
なってしまうだけですね。

繰り返しになりますが、変数名をタイプミスしたか、ミスして
ないか、それは自分自身でチェックできるようにならなければ
なりません!

それが、プログラマーのごくごくごく、常識事である言うのは
確かです。皆さん、よろしいですね。

あなたが使っているあらゆるソフトにも、そんな名前のタイプ
ミス、チェックをしてくれる機能が必ず付いているいうので
あればまだしもですが、メモ帳でも、メールソフトでも、他の
マクロ言語でも、殆ど全てのソフトにそんなチェック機能など
付いてはいません。

ワードには(Excelのオプションにも)スペルチェック機能は
ありますが、そもそもがあんな機能(スペル間違ってると機械
が判断すると赤い波線みたいのが勝手に表示されてしまう機能)
あれって必要ですか?余計なお世話じゃないですか!?(笑)

前回の話の「文章はスッキリと」と同様に、
まず自分を過信しない事、常識的に考えたタイプミスの防衛策
いうのは「名前はコピッペする。」できるビジネスマンでも
できるプログラマーでも、それしかない思います。


はっきり言いますが、残念ながらVBAの場合、
「タイプミスやスペルチェックの為に変数強制オプションを
付けろ!」と言っている、そのようなできるプログラマーに
あるまじき勘違いが非常に蔓延してしまっていますから、、

只でさえ下に見られがちな簡易言語のVBAが、プロからは
増々見下される、その原因の一つとなっているというのは、
それは紛れもない事実かと思います。残念です。。

ちょっとした数行や数十行のマクロを組むために(初・中級者
のマクロは全てこの範囲内です。)、変数名定義の強制なんて

 Dim i As Long
 Dim j As Long

とかですね、必要であるわけがないです。

また、「明示的に Dim は必ず書け!」って言ってる人も居る
思いますけど、、

これも、例えば私のようなプロの場合だと詳細設計書(変数一覧
や領域図など)のドキュメントに書く(明示する)わけなんです
が、素人の皆さんはそこまでやる必要はないですから、

これは、私が指導する場合にはプログラム中にコメント文で

 '変数 i は、シート縦方向(行方向)のループカウンター
 '変数 j は、シート横方向(列方向)のループカウンター

と書いておく方がずっと明示的で、後々までわかりやすいでしょ。
そう言っています。まぁこれは、

 Dim i 'シート縦方向(行方向)のループカウンター
 Dim j 'シート横方向(列方向)のループカウンター

これでもよろしいですけど、
少なくとも、要らん「 Option Explicit 」を付けての

 Dim i
 Dim j

これじゃあ、人間は元より、コンピュータにも何の意味も成しま
せんからね。(コンピュータに変数名の概念は存在しません。)

意味がないどころか、(これはせっかく調子出てきて仕事が波に
乗ってきた矢先に、要らん電話が掛かって来たり、要らん上司に
話しかけられたりのごときに、)この為にせっかくの「プログラ
ミング思考が中断されてしまう」大きなマイナス行為になります。

       ↑これはほんと重要ですよ!

 

というわけで、本日は、

「当たり前の正しい習慣を身につけましょう!」

間違ってはならない名前は(メールの相手名もVBAの変数名も)
「必ずコピッペせよ!!」

と言うお話しでした。

本日の「変数名の強制オプションは使ってはいけない理由」、
まずのその一つ目ご理解いただけましたでしょうか?


なお、この理由には他にもまだまだいっぱい、沢山ありますが、
どれもまた話が長ーくなりそうですので(笑)、またいずれ機会
ありましたら書いてみたい(なるべく早めに)と思っています。

ほんと困ったことに、VBA界隈には修行と称して他人にめんど
くさい事をやらせよう、やらせよう、する人が多い思いますが、
私は、マクロでのそれは実にナンセンスだと思います。

なぜならば、

そもそも「面倒くさ~い」を撃退する為にやるのがマクロである
からです。(このメルマガ冒頭のサブタイトルにもあるように)
だから、そのような面倒を好む人はそもそもが「本末転倒で、
マクロの本質が解かってない」としか言いようがない思います。

世の中に数々あるマクロ言語に(VBAはその中の一つ)、
「変数名の宣言を強制される言語」というのは(VBAも含めて)
ただの一つも在りません。当然、在り得ません!

マクロ本来の目的である面倒なコンピュータ操作の自動化が
やりたくてマクロを学んでいる人は、今日お話ししたVBAの
正しい使い方いうのを心してやっていってくださいね。

決して、(VBA界隈の誰かに騙されてー)要らんオプションの
設定をしてしまったりはしないよう、くれぐれもご注意ください。

とにかく、マクロは手軽でなければ意味がありませんから、
そんな仰仰しい設定の強制なんてやってしまったら、絶対に
ダメ!ですよ。

 

■マクロ作りの基本は動画で学ぼう!

YouTubeの公式チャンネルはこちらです。→ マクロを10分で理解する動画

 

 

コメント (4)    この記事についてブログを書く
« よくあるExcelマクロ(VBA)の... | トップ | ジュリ~~~ ♪ »
最新の画像もっと見る

4 コメント

コメント日が  古い順  |   新しい順
気になるのは (シマダ)
2019-02-04 20:49:04
pythonで書いてると変数の宣言は殆どしないですが、型の指定をしたらいちいち自動で判断しなくなる分処理が数十倍速いです。
Excelvbaでも同じ事は起きませんか?

蛇足ですが、型指定してた方がプロパティが不完全な時でも対応してくれたり、ミスに気づきやすいから、いい加減で作るときほど先に型指定ついでに宣言強制してます。
vbaって気が利きすぎで逆に難しいです。
あと、タイプミス前提で作って回しながら修正する横着タイプですが、クラスとか関数周りをきれいに作ってるので、すぐデバッグ出来るようにしてます。
エディタで変数名も入力補助されるので、今はテキトーでコードを書ける時代だと感じてます。
こんなデタラメなプログラマでも、ひとりで定義からテストも実装も出来て、十数社から仕事もらってるくらいなので、手を抜くところを確定してれば何も問題ない気がします。
返信する
専門的な話にはなりますが・・・ (三太郎)
2019-03-26 09:06:09
アセンブラとかC言語のポインタとかのアドレスの話は、わかりますか?
変数というのはあくまで人間向けの話でありますので、コンピュータにしてみたら先頭のアドレスだけです。型というのは、そこからの長さに必要な情報です。
Pythonでは、その型の情報もひっくるめて一つにまとめてあるから宣言は不要です。
なお、Pythonでいちいち型宣言したからしないからと言って、そんなに(数十倍も?)速度上がるといったことは無いです。(精々数倍程度の話でしょうか。。。)
ご質問のVBAの場合でも、10秒が5秒に・・、程度のものでしょう。そもそもが、マクロは5時間の手作業が10秒になるという話ですから、それが10秒なのか20秒なのか、はたまた30秒掛かるか、それを(5時間に比べたら微々たる誤差の範囲を)気にする必要というのは
まずありませんね。
返信する
Unknown (ひでお)
2019-04-17 17:21:07
現代のプログラムにおいて、データ型を宣言する必要が無い…その通りだと思います。
人は間違うとの事、いやはや全く同感です。

ならば、コピペにミスは無いのですか?
選択範囲が足りない・選び過ぎてる。
コピーしたつもりが出来てなくて前の文字列のままだった。

コピペを誤った結果、全く違う変数に値を入れてしまう。
誤りを探すために時間を使う方が無駄だと思うのですが。

そして誤りに気付ければいいですが、
気付かないままプログラムが完成した時、大変な事にならないですか?

私は間違いにならない間違い、めちゃくちゃ怖いです。

理解した上で外すのは結構ですが
“option explictit外せば動くから いーらない“っていう
初心者が増えない事を願うばかりです。
返信する
要は、そんなことは機械に頼るなっ! (三太郎)
2019-05-24 15:15:42
そもそも、コピッペすらまともに出来ない言う人は、Excelなんか出来るんですか?
これは、日本語でひらがな読めないカタカナ書けない言ってるに等しいですから、プログラミング以前の、Excel以前の、パソコン以前の、IT以前の問題だと思います。
幼稚園からやり直してくださいね(笑)。まずは、正しいコピッペの練習から始めましょう!ダブルクリックでの範囲選択もありますよ。

根本的な事を言うと、解決策の方法論が間違ってる言っているわけです。
スペルチェックをいちいち機械に(Optionに・・)頼っているようでは、いつまで経っても真っ当なプログラマーなんかになれる訳がありませんから、日本語の文章書くのと一緒で誤字のチャックぐらいは自分で出来るようにならないと・・・、自分の為に。そう思うわけです。
何か結果おかしい思ったら、スペルミスやコピッペミスをしていないか?「必ずまずはそれチェックするクセ」を付けておきさえすればいいだけですね。自分でチェックするのに5分と掛かりません話なんですから。。。

とにかく、初心者の皆さんには「チェックを機械に頼らない」でプログラムを作れる真っ当なプログラマーを目指して欲しい思います。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

VBAあるある」カテゴリの最新記事