【エクセルVBA】コンパイルエラー:変数が定義されていませんエラーの原因と対処方法

時計 2023.04.08 / 時計

【エクセルVBA】コンパイルエラー:変数が定義されていませんエラーの原因と対処方法

記事ではエクセルマクロ(VBA)における、「コンパイルエラー:変数が定義されていません」エラーの原因と対処方法について解説していきます。

エクセル作業の効率化を図るためにVBAでマクロを作成する人はどの企業にも1人以上はいます。VBAでマクロを作成すると、思った通りに動くまで様々なエラーに遭遇します。

マクロ実行時に多くの人が目にするエラーの一つに「コンパイルエラー:変数が定義されていません」エラーがあります。本記事を通して、原因やその対処方法について理解を深めてください。

VBAで作成したマクロ実行時に発生したエラー

VBAでマクロを作成し、実行すると以下のエラーが発生することがあります。

マクロ実行時に発生したエラー

コンパイルエラー:変数が定義されていません

エクセルVBA:コンパイルエラー:変数が定義されていません

このエラーはエラー文にあるように変数が定義されていないことにより発生しています。

しかし今まで問題なく動いていたのに突然このエラーが発生して、マクロが実行できなくなることもあります。

「変数が定義されていません」エラーの原因

「変数が定義されていません」エラーが発生する原因は以下の3つです。

  • 変数が正しく定義(宣言)されていない
  • Option Explicitが記述されている
  • コードの設定で「変数の宣言を強制する」が有効になっている

項目2、3の原因に関しては、変数の宣言を強制させる記述および設定です。基本的に「変数の宣言の強制」が有効になっていることが望ましいです。

しかし途中でこれらを有効にした場合、今まで動いていたマクロも影響を受け、最悪の場合マクロが動かなくなります。そういった場合でも項目1の原因を対応することが望ましいですが、時間がない場合は「変数の宣言の強制」を無効にしても大丈夫です。

「変数が定義されていません」エラーの対処方法

「変数が宣言されていません」エラーの各原因に対する対処方法を以下に記します。

変数が正しく定義(宣言)されていない

このエラーが発生する根本的な原因はきちんと変数が定義されていないからです。VBAでは変数を使用する前にDimステートメントで変数を定義しましょう。

構文

Dim 変数名 As 変数の型

Sub TestRun()
    Dim i As Integer
    i = 54
End Sub

変数の型にはStringやInteger、Longなどがあります。定義した変数に格納する値によって正しい型を宣言するようにしましょう。

変数を定義しているのにエラーが出ている、という場合は変数のスペルミスをしていることが考えられます。定義した変数と使用している変数にスペルミスがないか確認しましょう。

Option Explicitが記述されている

「Option Explicit」は変数の宣言を強制させる記述です。

Option Explicit

この記述がマクロ内にある場合、必ず変数は使用する前にDimステートメントで宣言する必要があります。裏を返せばOption Explicitがなければ、変数を宣言していなくても利用ができるようになるということです。

そのため今までは問題なく動いていたマクロが突然本エラーが発生して動かなくなる原因として、知らずにマクロ内にOption Explicitを追加していたということもよくあります。

その場合はOption Explicitを削除すればマクロは動くようになるでしょう。しかしVBAでは基本的には変数を宣言する言語なので、Option Explicitの記述があることをお勧めします。

コードの設定で「変数の宣言を強制する」が有効になっている

Option Explicitと同様のことをオプション設定から有効にすることができます。

  1. ツールタブをクリック<オプションを選択
  2. Excel VBA:ツールタブをクリック<オプションを選択
  3. 編集タブ内の「変数の宣言を強制する」にチェックを入れる
  4. Excel VBA:編集タブ内の「変数の宣言を強制する」にチェックを入れる

上記の流れで変数の宣言を強制します。変数の宣言の強制を解除したい場合は、チェックをはずしてください。

まとめ

本記事「【エクセルVBA】コンパイルエラー:変数が定義されていませんエラーの原因と対処方法」はいかがでしたか。

VBA初心者は頻繁にこのエラーを発生させると思いますが、慌てずに変数を宣言してマクロを作成してください。