ExcelVBAを学習していると、条件分岐で頻繁に利用する「If ~ ElseIf ~ Else」構文に出会います。シンプルなIf
だけでは処理を分けきれないため、複数条件を評価できるElseIf
は非常に便利です。
しかし、実際にコードを書いてみると「ElseIfが使えない」「エラーになる」「思った通りに動作しない」といった悩みを抱える人が多いのも事実です。
この記事では「vba elseif 使えない」をテーマに、なぜElseIfが正しく動作しないのか、その原因と対策を解説します。また、代替方法としてSelect Case
やネストされたIfの使い方も紹介し、実務での活用例まで徹底的に掘り下げます。
目次
✅ ElseIfが使えないときに考えられる原因
・スペルミスによるエラー
VBAでは Else If
ではなく ElseIf
(スペースなし) が正しい書き方です。
誤って以下のように書くと構文エラーになります。
' 誤り
If x = 1 Then
MsgBox "A"
Else If x = 2 Then
MsgBox "B"
End If
正しくは以下のように記述します。
' 正しい書き方
If x = 1 Then
MsgBox "A"
ElseIf x = 2 Then
MsgBox "B"
End If
・End Ifの位置が不適切
If ~ ElseIf ~ Else ~ End If
の構造を崩すと「ブロック構文が正しくありません」というエラーになります。
If x = 1 Then
MsgBox "A"
ElseIf x = 2 Then
MsgBox "B"
' End If が抜けているとエラー
・条件式の書き方が誤っている
比較演算子の誤りや、条件の重複によって意図しない結果になるケースもあります。
例:
If x > 10 Then
MsgBox "大きい"
ElseIf x > 5 Then
MsgBox "中くらい"
Else
MsgBox "小さい"
End If
この場合、x=8
なら「中くらい」が表示されます。
しかし条件順序を間違えると「大きい」や「小さい」と誤判定される可能性があります。
参考:【VBA】条件に一致するセルを複数取得する方法|Find・For Each・SpecialCells
✅ ElseIfを正しく使う基本構文
・シンプルな例
Sub ElseIfSample()
Dim score As Integer
score = 75
If score >= 80 Then
MsgBox "合格(優秀)"
ElseIf score >= 60 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If
End Sub
・複数の条件を連続評価
If x = 1 Then
MsgBox "ケース1"
ElseIf x = 2 Then
MsgBox "ケース2"
ElseIf x = 3 Then
MsgBox "ケース3"
Else
MsgBox "その他"
End If
参考:【VBA】IF文での複数条件の考え方と書き方のコツ
✅ ElseIfが使えない場合の代替方法
・Select Caseを利用する
条件が数値や文字列に基づく場合はSelect Case
が有効です。
Select Case x
Case 1
MsgBox "ケース1"
Case 2
MsgBox "ケース2"
Case 3 To 5
MsgBox "3~5の範囲"
Case Else
MsgBox "その他"
End Select
・ネストされたIfを使う
複雑な条件分岐ではElseIf
よりもネストIfの方が可読性が高い場合があります。
参考:【Excel】IF関数とは?使い方・複数条件・ネスト構造まで徹底解説!
If x > 0 Then
If y > 0 Then
MsgBox "xもyも正"
Else
MsgBox "xは正、yは負"
End If
Else
MsgBox "xは0以下"
End If
✅ 実務での活用例
・点数判定プログラム
Sub ScoreJudge()
Dim score As Integer
score = Range("A1").Value
If score >= 90 Then
Range("B1").Value = "A評価"
ElseIf score >= 70 Then
Range("B1").Value = "B評価"
ElseIf score >= 50 Then
Range("B1").Value = "C評価"
Else
Range("B1").Value = "不合格"
End If
End Sub
・文字列条件の分岐
Sub CheckStatus()
Dim status As String
status = Range("C2").Value
If status = "完了" Then
Range("D2").Value = "処理済"
ElseIf status = "進行中" Then
Range("D2").Value = "対応中"
Else
Range("D2").Value = "未処理"
End If
End Sub
・複数条件を組み合わせる
Sub MultiCondition()
Dim age As Integer, gender As String
age = Range("A1").Value
gender = Range("B1").Value
If age >= 20 And gender = "男性" Then
MsgBox "成人男性"
ElseIf age >= 20 And gender = "女性" Then
MsgBox "成人女性"
Else
MsgBox "未成年"
End If
End Sub
✅ ElseIfを使う際の注意点
- 必ずスペルは
ElseIf
(スペースなし)で書くこと。 - End Ifを忘れない。複雑な入れ子では特に注意。
- 条件式の順序を正しく。大きい条件から小さい条件へ記載するのが一般的。
- 複雑になりすぎたらSelect Caseに切り替える。
- デバッグで条件を確認。イミディエイトウィンドウで値をチェックするとエラーの原因を特定しやすい。
✅ ElseIfとSelect Caseの使い分け
- 数値・文字列がメインで、条件がシンプル →
Select Case
- 複雑な条件式(複数の演算子や論理式を含む) →
If ~ ElseIf
- ネストが深くなる場合 → 処理を分けたり、関数化を検討する。
■ まとめ:ElseIfを正しく使って効率的な条件分岐を実現しよう
- VBAで条件分岐を行う場合、
ElseIf
は非常に有用だが「Else If」と書くと構文エラーになる。 End If
の抜けや条件順序の誤りでも「使えない」と感じるケースが多い。- 実務では点数判定やステータス振り分けなどに多用される。
- 代替方法として
Select Case
を使えば条件が整理され、可読性が向上する。 - 正しい使い方を理解すれば、複雑な分岐処理もスッキリと記述できる。
ExcelVBAで「ElseIfが使えない」と悩んでいる方は、まず構文や書き方を見直し、必要に応じてSelect Caseを活用してください。条件分岐を自在に扱えるようになれば、業務自動化の効率は一気に高まります。