Option Explicitとは何、必要? VBA記述で不注意なエラーを防止する

vbaopexplieyecatch

Option Explicit とは何?
VBAプログラムで使っている変数の明示忘れを防止する=不注意なエラーを防止する=とてもありがたいステートメントです。
しかも自動記述モードもあります。

 

こんにちは じゅんぱ店長 (@junpa33) です。

 

今回の話は、エクセルVBAコードの書き出しのところでの最初の疑問についてです。

エクセルVBAに取り組み始めてほぼ全員(?)の人が最初に思う疑問だと思います。

その名は「Option Explicit

引継ぎした社内PCで、初めてビジュアルベーシックエディタ(VBE)を開いた時、いきなりこれが書いてあったという経験の人もいるでしょう。

「何だョ コレは、いきなりどういう意味?」と思ってしまいます。

「オプションの例外(Option Exception)ウンッ? ウン? 」

ねこ氏

PCの起動中で「例外の発生」は非常に嫌な状態 -ブルースクリーン- バイオスがシャットダウンするのかと思ってしまいます。

Option Explicit とは何?VBA記述に必要?

 

例によって、Google翻訳で調べると「オプション明示」と出ました。これでは意味が分かりません。

何かを「明示しなさい」と言うことでしょうか。

答えを先に言いますが、

VBAプログラムの中で、『変数』を扱う時は、絶対に『変数をこれから使いますよ』と宣言(明示)しなければいけません。

と言うことを言っています。つまり、

 Option Explicit が記述されているのに、変数の宣言をしないと、

vbaoptionexplicit001a

こうなります。

 では最初からOption Explicit を記述していなければ、

vbaoptionexplicit002

問題なくコードが実行されます。

ということです。

Option Explicit が記述されていて、エラーなしで(変数を宣言して)実行するには

 

vbaoptionexplicit003

コード
Option Explicit

Sub オプションエクスプリシットは嫌いだ()
    Dim a As Long
        a = 110
        Range("B1") = a
End Sub

と記述します。

 

Option Explicit は必要ないでしょ!

 

と言うことは、Option Explicit を書かない方が、エラーストップもしないので、こっちの方が良さそうに思います。

それにいちいちアルファベットを打ち込むのも面倒だし。

ねこ氏

うささん

では何故、「Option Explicit は必要ないでしょ」ではなく、「Option Explicit を記述しましょう!必要です!」と推奨するのでしょうか?

 

ちょっとした例え話ですが、

あなたは、お友達と、お茶をしにお店に立ち寄りました。

あなたは手に持っていたスマホをテーブルに置いたまま、お友達との会話に盛りあがります。

ひとしきり盛り上がった後、お店を出るのですが、テーブルに置いたスマホを、そのまま忘れてしまいそうになりました。

 

それに気づいた店員さんが、「スマホを忘れていますよ」とあなたに注意を促してくれました。

あなたは、忘れ物をせずに済みました。忘れていたら、また大騒ぎになる所でした。

 

その店員さんの名前は、Option Explicitさんでした。

何故、Option Explicit を使うのか、それは、コードの中に潜むエラー、バグを防止したり減らしたりするためです。

 

実際にコードを組み上げていく時には、当たり前のようにして「変数」を複数個は使用することになります。

変数の宣言もせずに、複数個の変数を使用すると、それこそ『テーブルに置き忘れ』で「何用として使った変数か」や「同名の変数」を別目的で使ったりしてしまうでしょう。

変数にまつわるエラー、バグは、記述したプログラムコードを遡ったり、変数に代入された値が適正かどうかをその都度調べに行ったり、

結構、最悪系のエラー修正作業になっていしまいます。

みなさんは少しでもこんな作業をしたくはないので、

必ず、「Option Explicit」を使って、このプログラムで利用している、変数の明示忘れをしないようにしているのです。

 

Option Explicit は自動記述の初期設定で手間なし

 

Option Explicit は、モジュールの一番最初に記述しますが、

毎回毎回、記述していかなくても大丈夫です。

モジュールを立ち上げる(挿入する)度にVisual Basic Editorが自動で記述してくれます。

その方法は、Visual Basic Editorのオプション設定をしておくだけの事です。

Visual Basic Editorでツールからオプションへと進みます。

 

vbaoptionexplicit004

矢印下001

「変数の宣言を強制する」の項目にチェックを入れます。

 

vbaoptionexplicit005

OKボタンで完了です。

設定は楽勝です。

 

まとめ Option Explicit はエラー防止に必要です

 

<「Option Explicit」を書く、書かない どっち?>によって、

<変数を宣言する、宣言しない どっち?>とはならないと思ってください。

変数を宣言しなくて済むからOption Explicitは記述しないという考え方は論外でしょう。

 

自分でVBAコードを組み立てて行く上で、

「コードエラーを少しでも発生させたくない」から変数を宣言して明示するのは当然で、

その変数の宣言を忘れないように記述することをサポートしてくれるのが、

Option Explicitステートメントだということです。

 

「コードエラーを少しでも発生させたくない」と考えている人はOption Explicitを記述しましょうということです。

 

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできます。

Udemy1eyecatch エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

 

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

 

今回の記事はここまでです。   最後までご覧いただき有難うございました。

 

vbaborder1eyecatchVBAでセルに罫線を設定する 位置・線種・太さ・色vbarowseyecatchVBA Rowsプロパティの範囲選択と関連のメソッドvbadeleteeyecatchVBA DeleteとClearの使い分け 削除とクリアの違いを最速理解vbacurrentregioneyecatchCurrentRegionは範囲取得プロパティ 連続データをまとめて掴むSpecialCellseyecatchSpecialCellsメソッドは特定のセルを選択する多機能ツールVBAFunctioneyecatchFunctionプロシージャーの働きと使い方 ユーザー定義関数もここ知れOK!vbacalleyecatchCallステートメントはプロシージャーの部品化に必須項目 エクセルVBA最速理解vbacharactereyecatchaCharactersプロパティで文字列中の一部の文字の書式設定や加工をするvbafontsyseyecatcha文字の書式の設定方法 Fontプロパティで装飾操作ができるVBAFormateyecatchFormat関数を書式設定のテッパン関数にする!実務での書式と重要5例vbaintfixeyecatch数値の整数部分を完全分離 Int・Fix・Abs・Sign関数で出来る使い方vbarndeyecatchRnd関数で乱数を取得。使えない戻り値を加工して利用度を上げるVBAコードvbaroundupdowneyecatchRoundUpとRoundDown関数の使い方。数値の切り方に注意が必要ですvbaroundeyecatchRound関数の毒針。VBAで数値を四捨五入する時の注意点vbamaxminaveeyecatchMax・Min・Averageワークシート関数で最大値・最小値・平均を求めるvbainsteeyecatchInstr関数・InstrRev関数は文字列を検索する。ファイルパス取得に威力vbareplaceeyecatchReplace関数は文字列を置換・削除する利用度の高い関数vbaselectcaseeyecatchSelect Case 条件分岐の使い方。ステートメントの基本はコレ。VBAValeyecatchVal関数の使い方はデータ型不一致の解決策。値を文字列型から数値型へVBAStringeyecatchString関数の使い方は文字を指定した数だけ並べることが出来る

 

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。