【Excel VBA】Option Explicitの意味を解説します。

めい
よく見かける「Option Explicit」ってどういう意味なんだろ。。
りゅう
こんにちは!りゅう(@ryupong_b)です。
今回は、「Option Explicitの意味」について解説していきます。
はじめに

ExcelVBAのサンプルコードを検索していると、Option Explicitというキーワードを目にしませんか?
これは標準モジュールやクラスの冒頭に記載するコードなのですが、どのような意味を持つのかを解説します!
また、ExcelVBAにおける変数宣言時の注意点も併せて解説しますので、ぜひ最後までお付き合いください。

この記事を読むメリット
  • OptionExplicitの意味が分かります。
  • 変数宣言時の注意点や、コーディングのお作法が分かります。

Option Explicitの意味

Option Explicitの意味ですが、変数を使うためには強制的に変数宣言をしなければならないという意味合いを持っています。

めい
え?変数って宣言しないと使えないんじゃないの?

実はExcelVBAは、変数は宣言しなくても使用できるんです!
例えば以下のようなコードがあったとします。

サンプルコード

サンプルコード
Public Sub testOptionExplicit()

    hensu = "ABC"

    ' A1セルに "ABC" を書き出し
    ThisWorkbook.Worksheets(1).Range("A1").Value = hensu

End Sub

上記は変数の宣言をしていないですが、エラーにはならず通常通りに実行されます。
Option Explicitは、上記のような変数宣言をしていないコードをエラーにするステートメントです。

りゅう
ただし、僕はこのコードは推奨しません。
恐らく他の言語を経験したことがある方は分かるかと思いますが、気持ち悪いですよね…(笑)
気持ち悪いだけではなく、変数宣言には明確なメリットがあるので次項で解説します。

Option Explicitのメリット

Option Explicitのメリットは大きく分けて以下です。

Option Explicitのメリット
  • 可読性の向上
  • 型定義が必須となる

次項にて、それぞれ解説していきます!

可読性の向上

これは分かりやすいメリットですね。
例えば以下のサンプルコードの場合、3行目の[hensu]という文字を見て、「なんだこれは?」という疑問が浮かんできますよね…(笑)
変数は正しく宣言して、どういう意図で作成した変数なのかのコメントを添えると 100点です!

サンプルコード

サンプルコード
Public Sub testOptionExplicit()

    hensu

    hensu = "ABC"

    ' A2セルを選択
    ThisWorkbook.Worksheets(1).Range("A1").Value = hensu

End Sub

型定義が必須となる

変数宣言をするということは、データ型の定義をしなければなりませんよね。

変数宣言をせずに作成した変数のデータ型は、Variant型となってしまいます。
Variant型とは、何でも入るデータ型です。

以下のコードでは、hensu1に文字列を代入し、hensu2には数値を代入しています。

サンプルコード

サンプルコード
Public Sub testOptionExplicit()

    hensu1 = "ABC"
    hensu2 = 1

End Sub

デバッグしてどのようなデータ型になっているのかを確認したら、以下の結果となります。

hensu1は、Variant/String型となっていて、hensu2は、Variant/Integer型となっていますね。
先ほど、Variant型となると言いましたが、実は内部で「おそらくこのデータ型だろう」と暗黙的にVBAで判断しています。
従って、マクロの動作が重くなる原因となります。

最後に

いかがでしたでしょうか。

たまにですが、OptionExplicitを記載せず、かつ変数も宣言していないソースコードに出会うことがあります。
正直、エンジニアだったら変数宣言はマナーであると認識頂いて良いかと思います。
OptionExplicitを記載して、美しいソースコードを目指しましょう!

この記事が、読者さまのお力になれれば嬉しいです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA