- ベストアンサー
ステートメントについて
お世話になります。 Option Explicitステートメント を記述するのとしない場合の違いが今一良く 分かりません。 どなたかサルにでも分かるようにご教示 頂けませんか? よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
うー。サルでも分かる様にだから。 仮に、工具箱にナイフが沢山入っている。 このナイフをだれの許可も得ず自分は自由に使える事が出来る。 だれも文句を言わない。いわゆる自由きままで大変楽だ。 ナイフを完全に自分のものに出来る。 この様な使い方が 「Option Explicit を記述しない」時の使い方です。 しかし、この方法でなにも悪い所がないと思う。自由に使えるのだから、 むしろ大変便利に思うが。 しかし、そうもいかない所がプログラムの世界なのです。 どうして上手くいかないかって。 もしもだよ。工具箱に沢山入っているナイフが見た目がみな殆ど同じ大きさで 同じ形だ。しかし、ナイフAは、金属を切るナイフ。ナイフBは木を切るナイフ。 ナイフCは紙をきるナイフとした場合、見た目は皆同じ形だし、大きさも同じだと 使う時にあなたならどうする。今回は金属を切るのだけど、ナイフA、ナイフB、 ナイフCどれを使ったらいいのか悩む。 この時、一番に浮かぶのが、ナイフAは金属用、ナイフBは木工用、ナイフCは紙加工用 とナイフにラベルを貼ればいいと思いませんか?。 この沢山のナイフにラベルを貼る作業は、プログラムでは、変数宣言だ。VBでいうと Dim 変数 As 型 です。 じゃー。ナイフに用途別のラベルを貼れば、問題がない。使う時にラベルを見て使えばいいの だから。しかしそーもいかないのが、プログラムの世界だ。 なぜなら、仮にだよ。ナイフが20本程工具箱に入っている。そのナイフにはすべて用途別の ラベルが貼ってあってとしても、あなたは今回、1分間に、金属を切り、次に木を切り、 次に紙を切り、次にまた金属、また紙、木とナイフを6回持ち替えて順番に作業するとしよう。 1分間に6回もナイフを持ち替えるのだから、ナイフに貼っているラベルを確実に確認しながら 順番に作業に適したナイフを探せばいいのだが。しかしだな。所詮人間のする事だ。 人間は完璧なマシンではない。僕なら、ラベルを見間違えることだってある。 金属を切る作業の時に、ラベルを見間違って、紙を切るナイフを勘違いして、金属加工用だと 思って、金属を切ってしまった。当然紙を切るナイフなので、相手が金属だからナイフの刃が折 れてしまった(これがバグだ)。 ナイフを1本全く損をしてしまった。 なぜ、この様な事になってしまったかと言うと。工具箱に入っているナイフを自分一人ですべて 自由に使えるからこの様な事故が起こってしまったのです。 じゃー。この様な事故が起こらない様にするには?。 そう。工具箱に入っているナイフを自分で管理するのではなく、誰かもう一人、雇って工具箱 のナイフを管理する人間をおけばいいのです。この管理する人間をAさんとする。 その人は、ナイフのラベルを管理するだけの人で、あなたが、ナイフを用いて作業する人です。 色んな加工作業で、あなたは、工具箱から、作業に適したナイフを探してその都度作業します。 なにも間違いがない時は、管理する人間Aさんは黙っている。Aさんはいないのと同然だ。 しかし、なにかの拍子にあなたが間違ったナイフで金属を切ろうとした場合、ここではじめて、 管理しているAさんが出てきて、「きみ。ナイフが間違っている。金属をきるナイフはこれだよ」 と注意してくれる。 これなら、あなたは安心して作業出来ないかね。いくら間違っても、管理するAさんがいつも 注意してくれるのだから。 この管理する人間を、「Option Explicit」を宣言する事で、無条件で雇う事が出来るのです。 実際、雇うのは、人間ではなく、コンパイラなのです。 コンパイラに、私がコーディング途中でミスをするから、ミスしない様に見張っていてくれと頼む作業が 「Option Explicit」を宣言すると言う意味です。だから大変重要な宣言文になるのです。 出来るだけ、宣言する様にして下さい。事故(バグ)がおこらない様に。
その他の回答 (2)
- Ishiwara
- ベストアンサー率24% (462/1914)
サルに分かるかどうか、自信がないのですが、 Option Explicitを宣言しない場合: どんな変数名も使えます(システムが予約した語を除く)。 Option Explicitを宣言した場合: Dim などで変数宣言をしないと、その変数は使えません。 目的は、ミスタイプの防止、異なる変数間のウッカリ同名の防止です(特に複数人で開発する場合など)。
お礼
なるほどです。 そうですね、複数人の場合など起こりやすいかも 知れませんね。 ありがとうございました。
- redfox63
- ベストアンサー率71% (1325/1856)
Option Explicitを記述しない場合変数宣言の有無をチェックしません Sub Macro1 Sum = 0 for n = 0 to 100 Sum = Sum + n next MsgBox Sum End Sub といったプロシージャあった場合 変数 sum,nなどが宣言されていなくても Variant型の変数として扱ってくれます このプロシージャで sum = sum + n をタイプミスして sum = sm + n と記述しても エラーになりません しかし実行結果は 期待に反することになります Option Explicitが記述されている場合 このMacro1を実行しようとした時点でコンパイルエラーになります
お礼
なるほど。 わかりました。 早々ご回答頂きありがとうございました。
お礼
大変詳細にまた分かりやすいご回答頂き 誠に感謝致します。理解致しました。 本当にありがとうございました。