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

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など短い命令だと特に見つけにくいので、注意深くさがしてください。

 

関連記事

VBAエラー原因・解決方法
成果を出す5つのポイント
VBAエラー原因・解決方法
えくとしょ | 初心者のためのエクセルとVBAの図書館
タイトルとURLをコピーしました