「End If に対応する If ブロックがありません。」の原因・解決方法

エラー内容

VBAコンパイル時に、「End If に対応する If ブロックがありません。」と表示される。

End If に対応する If ブロックがありません。

原因と解決方法

おもに次の2つの原因と解決方法が考えられます。

(1)Ifに対してEnd Ifの方が多い

原因

If文の終わりをVBAに教えるのが、End Ifです。このEnd IfがIf文より数が多いとこのエラーが起こります。

実際のプログラムでは、次のような場面で起こりやすいです。

  • 「Ifは1つなのに、End Ifを2回入力してしまった。」
  • 「If文をコメントアウトしたのに、End Ifをコメントアウトし忘れた。」
POINT
コメントアウトは、コードの先頭に’を付けて、その行を実行しないようにすることです。

 

解決方法

If文とEnd Ifがセットになるように、不要なEnd Ifはコメントアウト、または削除します。

今回の例は、If文をコメントアウトしているので、End Ifの部分もコメントアウトしています。

 

(2)If文が1行なのにEnd Ifがある

原因

If文で条件と処理を1行で書いているのに、End If を書くとエラーとなります。

 

解決方法

条件と処理が1行のIf文では、End Ifは不要です。

そのため、End Ifを削除すればOKです。

 
ただし個人的には、If文は条件と処理を、別の行に書いた方が見やすいと思っています。
なのでEnd Ifを削除するのではなく、下のプログラムのように、条件と処理を別の行にする修正もオススメです。

POINT
このIf文が1行になっているエラー原因は、意外と気づくのに時間がかかります。
特にThenの後ろの処理が、Endなど短い命令だと特に見つけにくいので、注意深くさがしてください。

 

関連記事

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