この記事を読んでわかること
- VBAのコンパイルエラー「変数が定義されていません」と表示される原因と対処法がわかる
- コンパイルエラーの原因を特定するコツを知れる
- コンパイルエラーを繰り返さない方法を学べる
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします
VBAコンパイルエラー「変数が定義されていません」の原因と対処法

このエラーは、変数が定義(宣言)されていない場合や、変数名の書き間違いなどで発生します。
しかしながら、発生するには条件がありますので、まずは前提条件から見ていきましょう。
前提条件
「変数が定義されていません」というエラーは、「Option Explicit」を記述している場合に発生します。
補足記事:「Option Explicit」とは
通常VBAでは、宣言していない変数も使用することができます。
なので、「変数が定義されていません」というエラーは基本的には発生しません。
しかしながら、予期せぬエラーを防ぐためなどの理由で「Option Explicit」を記述している場合は、このエラーが発生する場合があります。
もし差し支えなければ、「Option Explicit」を削除するというのも1つの手です。
この記事では、「Option Explicit」を記述したままエラーを解消する方法を紹介いたします。
変数が宣言されていない
エラー文の通り、変数が定義(宣言)されていないと、このエラーが発生します。
下記VBAコードを見てください。
Option Explicit
Sub test()
num = 1
Debug.Print num
End Sub
前提知識{マクロの基礎・作り方から実行まで}
前提知識{「Debug.Print」で値を表示させる方法}
1行目に「Option Explicit」が記述されているため、宣言していない変数を使うことはできません。
しかし4行目で使用している変数「num」の宣言をしていないため、エラーが発生します。
エラーを解消するには、下記の通り4行目に宣言を追加しましょう。
Option Explicit
Sub test()
Dim num As Integer
num = 1
Debug.Print num
End Sub
前提知識{変数の宣言や使い方}
変数名の書き間違い
変数を定義しているのに、「変数が定義されていません」とエラーが発生する場合があります。
下記VBAコードを見てください。
Option Explicit
Sub test()
Dim num As Integer
num = 1
Debug.Print nun
End Sub
原因は6行目の最後です。
変数「num」と書いたつもりが、間違って「nun」になってしまっています。
「nun」という変数は宣言されていないため、エラーが発生します。
この場合の対処法や原因を特定するコツは次項で解説いたします。
原因を特定するコツ
エラーが発生した場合、原因がどれなのか、どこに原因があるのかわからず、イライラしてしまうことがあるかと思います。
コンパイルエラーは特に原因が特定しづらいエラーの1つですが、コツをお教えします。
まず、エラーが発生したら、エラー画面の「OK」ボタンをクリックしましょう。

すると、該当するプロシージャが黄色くマーキングされ、原因と思われる箇所が青くなります。

この青くなった変数が原因です。
この変数をコピーしてコード内検索をかけてみましょう。
やり方は、上部メニューの「編集」→「検索」をクリックするか、「Ctrlキー」を押しながら「Fキー」を押します。

検索ウインドウが開きますので、「カレントプロシージャ」を選択し、「完全一致」「大文字小文字を区別」にチェックを入れて検索します。
検索結果が1件しかなければ、書き間違いを疑いましょう。
宣言部分をチェックし、似たような変数が無いか確認しましょう。
検索結果が多数表示されていれば、単なる宣言忘れかもしれません。
一応宣言部分に似たような変数が無いか確認し、宣言を追加しましょう。
エラーを繰り返さないために
変数を使う場合は、手打ちせずに「宣言部分からコピペ」するのが無難です。
そうすることで、書き間違いによるエラーを防げるとともに、宣言忘れも防止することができます。
プログラミングにエラーはつきものなので、1回2回はしかたがありません。
大切なのは同じエラーを繰り返さないように対処することです。
最後に
VBA(Excelマクロ)のコンパイルエラー「変数が定義されていません」について解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!