エラー内容
VBAコンパイル時に、「If ブロックに対応する End If がありません。」と表示される。
原因と解決方法
おもに次の2つの原因と解決方法が考えられます。
原因1. If文の閉じ忘れ
解説
If文の処理の終わりで、End Ifを書いていないと起こります。
1 2 3 4 5 6 7 8 9 10 11 |
Sub ErrSample06_01() If Cells(1, 1).Value = "100" Then MsgBox "100点です!" '← End Ifがない End Sub |
解決方法
If文の処理の終わりに、End If を追加します。
1 2 3 4 5 6 7 8 9 10 11 |
Sub ErrSample06_01() If Cells(1, 1).Value = "100" Then MsgBox "100点です!" End If '← End Ifを追加 End Sub |
原因2. End Ifの数が足りない
解説
If文がネスト(入れ子)になっていて、Ifに対するEnd Ifが足りていない場合にも起こります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub ErrSample06_02() If Cells(1, 2).Value = "100" Then If Cells(1, 1).Value = "100" Then MsgBox "両方とも100点です!" '← End Ifが足りない End If End Sub |
解決方法
IfとEnd Ifがペアになるように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub ErrSample06_02() If Cells(1, 2).Value = "100" Then If Cells(1, 1).Value = "100" Then MsgBox "両方とも100点です!" End If '← End Ifを追加 End If End Sub |
POINT
今回の例のように、字下げを適当にしていると見つけるのに苦労します。
入れ子構造の時は、字下げをして構造が見やすいようにしましょう。
字下げは、コートの先頭でTabキーを押下すれば、右にコードが移動します。
今回の例のように、字下げを適当にしていると見つけるのに苦労します。
入れ子構造の時は、字下げをして構造が見やすいようにしましょう。
字下げは、コートの先頭でTabキーを押下すれば、右にコードが移動します。
POINT
Ifを入力したした後は、中身のプログラムを入力せずに、先にEnd Ifを入力しましょう。
その後、If文の中身のプログラムを書くようにすれば、End Ifの入力漏れが格段に減ります。
Ifを入力したした後は、中身のプログラムを入力せずに、先にEnd Ifを入力しましょう。
その後、If文の中身のプログラムを書くようにすれば、End Ifの入力漏れが格段に減ります。