IF文 VBAテクニック集 VBA一覧 文法・構文

【VBA】ElseIfが使えない?原因と正しい書き方・代替方法まとめ

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が有効です。

参考:【VBA】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を使う際の注意点

  1. 必ずスペルはElseIf(スペースなし)で書くこと。
  2. End Ifを忘れない。複雑な入れ子では特に注意。
  3. 条件式の順序を正しく。大きい条件から小さい条件へ記載するのが一般的。
  4. 複雑になりすぎたらSelect Caseに切り替える
  5. デバッグで条件を確認。イミディエイトウィンドウで値をチェックするとエラーの原因を特定しやすい。

✅ ElseIfとSelect Caseの使い分け

  • 数値・文字列がメインで、条件がシンプルSelect Case
  • 複雑な条件式(複数の演算子や論理式を含む)If ~ ElseIf
  • ネストが深くなる場合 → 処理を分けたり、関数化を検討する。

■ まとめ:ElseIfを正しく使って効率的な条件分岐を実現しよう

  • VBAで条件分岐を行う場合、ElseIfは非常に有用だが「Else If」と書くと構文エラーになる。
  • End Ifの抜けや条件順序の誤りでも「使えない」と感じるケースが多い。
  • 実務では点数判定やステータス振り分けなどに多用される。
  • 代替方法としてSelect Caseを使えば条件が整理され、可読性が向上する。
  • 正しい使い方を理解すれば、複雑な分岐処理もスッキリと記述できる。

ExcelVBAで「ElseIfが使えない」と悩んでいる方は、まず構文や書き方を見直し、必要に応じてSelect Caseを活用してください。条件分岐を自在に扱えるようになれば、業務自動化の効率は一気に高まります。

-IF文, VBAテクニック集, VBA一覧, 文法・構文