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のメリットは大きく分けて以下です。
- 可読性の向上
- 型定義が必須となる
次項にて、それぞれ解説していきます!
可読性の向上
これは分かりやすいメリットですね。
例えば以下のサンプルコードの場合、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を記載して、美しいソースコードを目指しましょう!
この記事が、読者さまのお力になれれば嬉しいです!
コメント