エラー内容
VBAコンパイル時に、「Else に対応する If がありません。」と表示される。
原因と解決方法
おもに次の2つの原因と解決方法が考えられます。
原因1. Elseの直前にEnd If
解説
Elseの直前にEnd Ifがあると、そこでIf文は終了します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub ErrSample07_01() If Cells(1, 1).Value = 100 Then '100点だったら、「パーフェクト」をメッセージ表示 MsgBox "パーフェクト" End If '← ここでIf文は終了してる ElseIf Cells(1, 1).Value >= 80 Then '80点以上だったら、「合格」をメッセージ表示 MsgBox "合格" End If End Sub |
解決方法
If文の基本の書き方は、次のようになります。
If 条件1
処理1 ←条件1の時に、プログラムですること
ElseIf 条件2
処理2 ←条件2の時に、プログラムですること
Else
処理3 ←条件1と2以外の時に、プログラムですること
End If
処理1 ←条件1の時に、プログラムですること
ElseIf 条件2
処理2 ←条件2の時に、プログラムですること
Else
処理3 ←条件1と2以外の時に、プログラムですること
End If
なので、Elseの直前にあるEnd Ifを削除して、次のようにIf文の構造を正しくします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub ErrSample07_01() If Cells(1, 1).Value = 100 Then '100点だったら、「パーフェクト」をメッセージ表示 MsgBox "パーフェクト" '← End Ifを削除 ElseIf Cells(1, 1).Value >= 80 Then '80点以上だったら、「合格」をメッセージ表示 MsgBox "合格" End If End Sub |
「ちょっとIf文わからなくなった・・・」という人は、If文の基本的な書き方・使い方【エクセルVBA超入門】も参考にしてください。
条件分岐|If文の基本的な書き方・使い方
プログラミングを始めたばかりだと「プログラムができれば、何でも自動でパソコンがしてくれる」と思う人もいます。
たしかにプログラムを組めば自動でパソコンに処理をさせることはできますが、判断する時の条件は人間が教えてあげないといけません。...
原因2. If文を1行で書いている
解説
If文の条件と処理を1行で書くと、End Ifがなくても、その1行でIf文は完結します。
次のプログラムは正しそうに見えますが、Else Ifの前でIf文が完結しているのでエラーとなっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub ErrSample07_02() '100点だったら、「パーフェクト」をメッセージ表示 If Cells(1, 1).Value = 100 Then MsgBox "パーフェクト" '← End IfなくてもIf文は終了 '80点以上だったら、「合格」をメッセージ表示 ElseIf Cells(1, 1).Value >= 80 Then MsgBox "合格" End If End Sub |
解決方法
条件と処理をそれぞれ別の行に書きましょう。
また、字下げをすることで、構造がわかりやすくなりバグも少なくなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub ErrSample07_02() '100点だったら、「パーフェクト」をメッセージ表示 If Cells(1, 1).Value = 100 Then MsgBox "パーフェクト" '← 条件と処理を別の行にする '80点以上だったら、「合格」をメッセージ表示 ElseIf Cells(1, 1).Value >= 80 Then MsgBox "合格" '← 条件と処理を別の行にする End If End Sub |
POINT
数行詰めるために、If文を無理して1行にする必要はありません。
それよりも条件と処理をそれぞれ別の行に書いて、構造の見やすいプログラムにしましょう。
数行詰めるために、If文を無理して1行にする必要はありません。
それよりも条件と処理をそれぞれ別の行に書いて、構造の見やすいプログラムにしましょう。