1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

知らないと怖いExcelVBAの穴1~変数宣言の強制~

Last updated at Posted at 2026-01-05

1. はじめに

Excel VBAは導入しやすく、実務でも使用しやすい言語です。
そして比較的ゆるい言語でもあります。

その「ゆるさ」が、初心者にとっては優しさであり、
実務では思わぬアクシデントを起こすことがあります。

このシリーズでは、既にある程度VBAを身に着け、
業務に活用している方々への振り返りとして、
見落としていると怖いExcelVBAの穴について触れていきます。

2. 変数宣言の強制とは

VBAでは通常、変数を宣言した上で使用しますが、
Excelの標準設定では宣言しなくても変数として使用できてしまいます。
VBEからモジュールを開いて、トップにOption Explicitの記述が無かったら要注意。
既に罠にハマっています。

変数宣言の強制とは、変数を宣言せずに使用するエラーになる状態であり、
設定を変更することでこの環境に変えることができます。

3.設定方法

  1. VBE(VBAエディタ)を開く(Alt+F11)
  2. メニュー「ツール」でツールウインドウを開く
  3. 「オプション」タブを選択
  4. 「変数の宣言を強制する」にチェック

これで新しく作るモジュールの先頭に自動で以下が入ります。

VBA
Option Explicit

注意

  • 既に作成されたモジュールには自動では入りません。
    既存モジュールには手動で追加が必要です。
  • PCにインストールされたExcelアプリケーションの設定なので、
    以後作成したExcelファイルには自動でOption Explicitが記述されます。
  • 設定されていたとしてもOption Explicitを削除したモジュールには、
    宣言の強制は働きません。

4.設定しないと何が起きるか

  • 記述ミスに気づかず、別の変数が生まれる

 例えば、こういうコード。

VBA
Sub Sample()
    total = 10
    totol = total + 5
    Cells(1 ,1).value = total
End Sub

 一見すると問題なさそうですが、totaltotolは別の変数です。

 totolはタイプミスですが、変数宣言をしていない場合、
 VBAは「新しい変数ですね、了解です」と素通しします。

 結果:セルA1に15を入力すべきところで、10が入力されます。
    しかもエラーは発生しません。

 これが一番危険です。

  • 宣言なし変数は Variant になる
     
     変数を宣言しないと、VBAでは自動的に Variant型になります。
VBA
Sub Sample()
    value = "012"
    value = value + 1
    MsgBox value
End Sub

変数valueに文字列012を代入しましたが、
value = value + 1で数値に変換され、メッセージボックスには13が入ります。

Variant は、数値も文字列も日付もNull も全部入る箱です。
便利そうに見えますが、

  • 入るべきでない値が入る
  • 型変換が勝手に起きる
  • 意図しない結果になる
    という事故の温床になります。

5. Option Explicit を使うとどう変わるか

Option Explicit を入れると、

VBA
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

これはルールというより、自分を守るための保険です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?