【Excelマクロ】VBAコンパイルエラー「変数が定義されていません」の原因と対処法

スポンサードリンク
VBA

この記事を読んでわかること

  • 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など、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました