Option Explicit とは、
結論から言うと、
変数名のミスを防ぐためにとの理由で付けているという人は付箋紙にでも、
「何か実行結果がおかしい時は、変数名をチェックしろ!」
とそう書いてPCやおでこにでも貼っておけば、いいだけです。笑
ただそれだけの事なので、変数名のスペルチェックに
5分と時間は掛かりません!
たったそれだけで、日ごろのVBA開発でオプション付けて
やっている不要で、ただ面倒な、Dim Dim Dim Dim の
Dim i As Integer やら、
Dim j As Integer やら、
Dim s As String だとか、
そのような無駄なDimのオンパレード書く為に、
せっかくのプログラミング思考がその都度中断を余儀なくされてしまう・・・。
という最悪の事態が防げるのです。
(仕事に集中できてる最中に、要らぬ電話が掛かってきたり
上司から話しかけられたりしなくなるのと、一緒です。。笑)
ですから、そうなるとVBA開発がえらく楽になりますし、
それがBasic言語のいい所でもあります。
第一それに慣れてしまうと、その様なオプションの無い開発環境の言語では
まともにプログラムの書けない人間になってしまうだけですよ。
まずは、実際にやって(オプションは外して)、
オプション付けてやっていた今と比べてみればよくわかると
思いますから(誰か他人の言うことをうのみにせずに!)、
実際にやり比べてみてから、自分で判断するようしてください!!
で、Excelを自動化する為のVBAプログラミングにおいて、
こんなものは断じて必要ありません!
Basic言語のマクロですから。。。
一般のプログラミングとマクロのプログラミングの
違いも知らずに、、両者混同してVBA教えてる人が、日本には多すぎます。。
そもそもが、
プログラムの変数ってプログラム上でデータを入れて置く為の箱でしょ。
じゃあ、Excel上でデータを入れて置く為の箱ってなんでしょうか?
そう、言わずと知れた「セル」ですね。
じゃあ、そのセルにデータを入れるときに、
いちいちデータの型なんか指定してますか?
セルのデータの型って、要するに、
[セルの書式設定]の[表示形式]の設定ですよ。
いちいち毎回、そんな面倒それやります?
それって、日付のデータなんかでよほど
自分が表示したいのと違う場合しかやらないでしょ!?
例えば、
"10/1"と入力したら"10月1日"と表示されちゃう時とか。
殆どの入力データは、デフォルトで
(つまりは、何も設定しないで済む表示形式の[標準]で)
使っていますでしょ。
で、Excelでデータ入れる時には殆ど
いちいち[表示形式]の設定(型の定義)なんてやらないくせに、
それを何故だか、
マクロ(VBA)になると「変数は必ずいちいち毎回定義しなさい!」
なんて言っているアホが大勢いるのです。。
マクロの言語なんて言うものは、間違いなく
そのアプロケーションの操作に極力近づけた使い方を
すべきものです。当選です。マクロとはユーザーが組むプログラムなんですから。
ExcelのVBAならば、
「極力、Excelの使い方に近づける!」
のが基本です。
それが、正しいマクロ言語の使い方になります。
いいですかっ!
「変数名のスペルチェックの為に変数定義の強制しろ(Option Explicit つけろ)」と言っているおバカな素人先生から、マクロを教わったら 絶対にいけませんよ!マクロ開発のプロとして(マクロ言語を知り尽くすプロとして)、 これだけは はっきり言っておきますよ。
そんなの解決策が間違ってる!言っているわけです。プログラムでも日本語の文章でも何でも、誤字のチェックを機械に頼るな!ちゃんと自分自身で出来るようにならないとダメですよ!って言う話です。
しかもVBAはたかだか素人言語にすぎませんから、 わざわざ、いちいち、「変数名を強制定義しろ」言ってる許せんヤツは、 プロのプログラマーからしてみたら (たかが、Excel自動化するだけのマクロ言語のVBAですよ!ベーシックなんですよっ!) 、ほんと、考えられないド素人!そのものです。まともな本職のプログラマーであれば、それに全く異論ない思います。VBAの世界はそんな素人先生ばかりで、、強く憤りを感じています。
Option Explicit とは、
これを先頭につけておくと、使用する変数は予め宣言しておかなければならない、という制限を設けるためのオプション設定です。
結論から言ってしまうと、
そもそも、マクロ言語に(VBAも含めて)変数定義が強制される言語なんてものは、ただの一つもありません。(for Applications なんですから・・・。笑)
しかも、ハードウェアがこれだけ進歩して高性能になってきた今この時代ですから、今どきのプロに一番人気のプログラミング言語である Python だって、そんな七面倒臭い強制はされません。
Dim本来の意味すらわかっていないただVBAに詳しいだけのド素人の面々が、「変数定義は強制すべきだ!」そうほざいているだけに過ぎません笑。たかがVBAで、そんな時代遅れな素人考え言ってしまったら、プロのプログラマー達からますますVBAが見下されて失笑すらされなくなりますから、、素人考えで物言うのはやめてください。)
ネット上には、よく
Option Explicit は必ず付けるべきた!
と言っている人が大勢いますが、
それはあくまで我々プロ(か、それに準ずるセミプロのレベルの人)の一般の高級言語(マクロ言語でない)を扱う中での話であって、
プログラム作りを本業とはしていない一般の Excelユーザーの方々が、より手軽に、より簡単に、自分のExcel作業を自動化するための目的でマクロを作りたいという場合(すなわち、マクロを組む行為)に、そんな(標準ではない)オプションの指定をするのは全くの逆効果です。
そもそも、
より手軽に簡単に、誰でもプログラムが作れるように!ということで開発された簡易言語であるBasic言語(VBAのBの部分に当たる)に、
わざわざ自ら要らんオプションルールを科し、プログラミングのハードルを上げてしまうような設定をするということ自体、実にナンセンスとしか言いようのない話だと思います。
素人プログラマーであるならば、(当の製造元のMS社も一般のOfficeユーザーが手軽に作れるプログラミング環境としてVBAを提供し、このような設定は標準ではなく、わざわざオプション設定としているわけなんですから、)
VBAはあくまで、少なくとも一般のユーザーレベルで利用する場合には、本来のベーシックな簡易言語だとしてとらえ、その特性を生かしたより手軽なプログラミングツールとして利用していくべきものだと思う次第です。
確かに私も、 お客様に依頼されてVBAで大掛かりな何万行のプログラムになるシステムを製造する場合には、このオプションはつけて開発を行っているわけではあるのですが、自分や社内で使うちょっとした便利マクロをVBAで組む際には、いちいち「 Option Explicit をつけて変数を宣言して・・・」なんて、時間の余計に掛かる手間な作り方は、一切しません。
まぁ要するに、自動化の為のマクロのプログラミングと、一般のプログラミング言語を使ったプログラミングとでは、当然、その本質も目的も作り方いうのも違ってしかるべきであるわけです。
なのに、
アマチュアのサンデープログラマーの皆さんが、プロと同じ作り方の「マネ」をしようとするから、(しいては、VBA教える方も素人に対して自分のやり方をマネさせようとするからゆえに)、必要以上に難しくなり、失敗し、挫折し、(*_*)...
ということになってしまう初心者の素人さんが非常に、これは多いわけです。
ベーシックな言語のBasic言語というのは、言うなればイージーでアバウトな使い方ができるというのが最大の言語特性ですから、(特別な場合を除いていちいち変数を定義しなくてもよいという仕様にもなっているわけで)それを自らわざわざ余計なオプションを設定して難しくし、よりハードルを上げてしまう、という理由などまったくないわけです。
あなたが、プロのプログラマーを目指しているという人ではない限り、自ら不用意にそのハードルを上げるようなオプション設定をしてはなりません!
私自身にしても、自分で使うちょっとした便利マクロを作る(数行~何百行程度の)といった場合に、Option Explicit なんてものをつけないで(変数の定義なんていちいちやらなくてよい方法で)、
気楽に、楽しく、アバウト感覚のイージーなVBAマクロのプログラム作りというのを楽しんでいます。
個人的だろうが何だろうが、機械的だろうが人間感覚的だろうが、
「明示した方が分かり易い」
方に「統一」した認識を持ってくれないと、ハッキリ言って、困る。
そこは、個々の責任範疇なので、自己チェックをしっかりって言うのは、「別の話」だよ。
何のために“社会”が作られているのか、「認識」というものは、統一した考えを持ってもらわないと
あとあと、周りが困るんだよ。
やるんだったら、アウトローでやってくれ。
確かに数行程度の簡単なソースなら付ける必要はないと思いますが、一般のユーザーだからこそミスも起こしやすいですし、デバッグに苦戦するのですからバグ防止のために普段から癖として付けるべきだと思います。
非常にVBAの勉強になります。ありがとうございます。