今回はVBAで「Elseに対応するIfがありません。」とエラーメッセージが表示される4つの原因紹介します。
エラーになる4つの原因
「End IF」の位置
IF文の中で「End If」を記述すると、そこでIF文が終了します。
IF~の記述がないのに、突然Elseが現れたと判断されるため、「Elseに対応するIfがありません。」のエラーになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub Sample1() Dim i As Long: i = 0 If Worksheets(1).Range("A1") = "" Then 'セルが空の場合 MsgBox "何も入力されていません。" End If Else 'セルに入力がある場合 MsgBox "データが入力されています。" End If End Sub |
1行で記述した場合
IF文を1行にまとめて記述した場合、1行で処理が完結します。
IF~の記述がないのに、突然Elseが現れたと判断されるため、「Elseに対応するIfがありません。」のエラーになります。
1 2 3 4 5 6 7 8 9 10 11 |
Sub Sample4() If Worksheets(1).Range("A1") = "" Then MsgBox "何も入力されていません。" Else 'セルに入力がある場合 MsgBox "データが入力されています。" End If End Sub |

うめ
個人的にはIF文を行でまとめるメリットを感じないため、このような使い方はしないですねぇ…。
「Next」が抜けている
IF文内でFor文の「Next」が抜けていると「Elseに対応するIfがありません。」のエラーになります。
※12行目をコメントアウトにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub Sample2() Dim i As Long: i = 0 If Worksheets(1).Range("A1") = "" Then 'セルが空の場合 MsgBox "何も入力されていません。" End If For i = 1 To 3 Worksheets(1).Cells(i, 2) = "値を設定してください。" 'Next i Else 'セルに入力がある場合 MsgBox "データが入力されています。" End If End Sub |

「End With」が抜けている
IF文内でWithを記述した時に「End With」が抜けていると「Elseに対応するIfがありません。」のエラーになります。
※12行目をコメントアウトにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub Sample3() Dim i As Long: i = 0 If Worksheets(1).Range("A1") = "" Then 'セルが空の場合 MsgBox "何も入力されていません。" End If With Worksheets(1) .Cells(i, 2) = "値を設定してください。" 'End With Else 'セルに入力がある場合 MsgBox "データが入力されています。" End If End Sub |

まとめ
VBAで「Elseに対応するIfがありません。」とエラーメッセージが表示される4つの原因について解説をしました。