1. はじめに
Excel VBAは導入しやすく、実務でも使用しやすい言語です。
そして比較的ゆるい言語でもあります。
その「ゆるさ」が、初心者にとっては優しさであり、
実務では思わぬアクシデントを起こすことがあります。
このシリーズでは、既にある程度VBAを身に着け、
業務に活用している方々への振り返りとして、
見落としていると怖いExcelVBAの穴について触れていきます。
2. 変数宣言の強制とは
VBAでは通常、変数を宣言した上で使用しますが、
Excelの標準設定では宣言しなくても変数として使用できてしまいます。
VBEからモジュールを開いて、トップにOption Explicitの記述が無かったら要注意。
既に罠にハマっています。
変数宣言の強制とは、変数を宣言せずに使用するエラーになる状態であり、
設定を変更することでこの環境に変えることができます。
3.設定方法
- VBE(VBAエディタ)を開く(Alt+F11)
- メニュー「ツール」でツールウインドウを開く
- 「オプション」タブを選択
- 「変数の宣言を強制する」にチェック
これで新しく作るモジュールの先頭に自動で以下が入ります。
Option Explicit
注意
- 既に作成されたモジュールには自動では入りません。
既存モジュールには手動で追加が必要です。 - PCにインストールされたExcelアプリケーションの設定なので、
以後作成したExcelファイルには自動でOption Explicitが記述されます。 - 設定されていたとしても
Option Explicitを削除したモジュールには、
宣言の強制は働きません。
4.設定しないと何が起きるか
- 記述ミスに気づかず、別の変数が生まれる
例えば、こういうコード。
Sub Sample()
total = 10
totol = total + 5
Cells(1 ,1).value = total
End Sub
一見すると問題なさそうですが、totalとtotolは別の変数です。
totolはタイプミスですが、変数宣言をしていない場合、
VBAは「新しい変数ですね、了解です」と素通しします。
結果:セルA1に15を入力すべきところで、10が入力されます。
しかもエラーは発生しません。
これが一番危険です。
- 宣言なし変数は Variant になる
変数を宣言しないと、VBAでは自動的にVariant型になります。
Sub Sample()
value = "012"
value = value + 1
MsgBox value
End Sub
変数valueに文字列012を代入しましたが、
value = value + 1で数値に変換され、メッセージボックスには13が入ります。
Variant は、数値も文字列も日付もNull も全部入る箱です。
便利そうに見えますが、
- 入るべきでない値が入る
- 型変換が勝手に起きる
- 意図しない結果になる
という事故の温床になります。
5. Option Explicit を使うとどう変わるか
Option Explicit を入れると、
Option Explicit
Sub Sample()
Dim total As Long
totol = total + 5
Cells(1 ,1).value = total
End Sub
totolを記述した時点で、変数が定義されていません
というエラーが出ます。
つまり、
- 書いた瞬間に気づける。
- 実行前に潰せる
- 原因が分かりやすい
6. 実務では「必須設定」
実務レベルでは、変数宣言の強制を設定しない理由はなく、
チーム開発では必須
個人利用でも必須です。
「小さいマクロだから大丈夫」は、大体あとで後悔します。
7. まとめ(教訓)
VBAは変数宣言なしでも動いてしまう
それが 最大の落とし穴です。
変数宣言の矯正は事故防止装置。
VBAを書くなら、最初に Option Explicit
これはルールというより、自分を守るための保険です。