Excel VBA | If..ElseIf 文を使った複数条件分岐

VBA
スポンサーリンク

Excel VBA の If..ElseIf を初心者向けにやさしく解説

If..ElseIf は「条件に合わせて処理を切り替える」ための超基本ツールです。やりたいことを日本語で整理してからコードにすれば、必ず使いこなせます。


しくみのイメージ

  • 基本の考え方: 「もし〜だったら、こうする。そうじゃなくて、もし〜だったら、こうする。どれでもないなら、これをする。」
  • 評価の順番: 上から順番に条件をチェック。最初に当てはまったものだけ実行され、残りは無視されます。
  • Else の役割: どの条件にも当てはまらないときの “最後の受け皿”。省略も可能。

使い方の基本構文

If 条件式1 Then
    条件式1がTrueのときの処理
ElseIf 条件式2 Then
    条件式2がTrueのときの処理
Else
    どれにも当てはまらないときの処理
End If
VB
  • 条件式: True(真)か False(偽)で判定できる式。数値比較、文字列比較、IsEmpty、Len などが使えます。
  • Then の中身: 実行したい処理(MsgBox、代入、Range操作など)

よくあるつまずきポイント

  • 比較の向き: 「以上」は >=、「以下」は <=。「より大きい」は >、「より小さい」は <
  • 条件の順番: 範囲が広い条件を先に書くと、狭い条件が届く前に飲み込まれます(例:>= 50 を先に書くと >= 80 には到達しない)。
  • Else の使い方: 例外やエラー時の保険に使うと安心。必須ではないけれど、実務ではよく使います。

例題で身につける

数値判定の基本(点数でメッセージを出す)

Sub ScoreJudge()
    Dim score As Integer
    score = Range("B2").Value ' B2セルの点数を読み取る
    
    If score >= 80 Then
        MsgBox "評価:A(とてもよくできました)"
    ElseIf score >= 65 Then
        MsgBox "評価:B(よくできました)"
    ElseIf score >= 50 Then
        MsgBox "評価:C(合格)"
    Else
        MsgBox "評価:D(要再提出)"
    End If
End Sub
VB
  • ポイント: 高い点数から順に評価する。上から判定されるため、>= 80 を先頭に。

文字列の判定(入力内容で分岐)

Sub StatusMessage()
    Dim status As String
    status = Range("A2").Value ' A2セルに「完了」「保留」「エラー」など
    
    If status = "完了" Then
        MsgBox "処理は完了しています。"
    ElseIf status = "保留" Then
        MsgBox "処理は保留中です。担当者に確認しましょう。"
    ElseIf status = "エラー" Then
        MsgBox "エラーが見つかりました。ログを確認してください。"
    Else
        MsgBox "不明なステータスです。入力を見直してください。"
    End If
End Sub
VB
  • ポイント: 文字列比較は完全一致。半角/全角やスペースの混入に注意。

日付で締め切り判定(今日と比較)

Sub DeadlineCheck()
    Dim due As Date
    due = Range("C2").Value ' C2セルに締切日
    
    If due < Date Then
        MsgBox "締切を過ぎています!早急に対応してください。"
    ElseIf due = Date Then
        MsgBox "締切は今日です。最優先で対応しましょう。"
    Else
        MsgBox "締切まで余裕があります。計画的に進めましょう。"
    End If
End Sub
VB
  • ポイント: Date は“今日”。過去・今日・未来の3分岐が定番。

複数条件を組み合わせる(AND / OR)

Sub ShippingRule()
    Dim amount As Double
    Dim member As Boolean
    amount = Range("D2").Value   ' 購入金額
    member = (Range("E2").Value = "会員") ' 会員なら True
    
    If amount >= 5000 And member = True Then
        MsgBox "送料無料(会員・5000円以上)"
    ElseIf amount >= 8000 Then
        MsgBox "送料無料(一般・8000円以上)"
    Else
        MsgBox "送料がかかります"
    End If
End Sub
VB
  • ポイント: 条件は「かつ(And)」と「または(Or)」を使って組み合わせ可能。

入力チェック(空欄・数値判定)

Sub InputValidation()
    Dim v As Variant
    v = Range("B2").Value
    
    If IsEmpty(v) Or v = "" Then
        MsgBox "入力が空です。値を入れてください。"
    ElseIf Not IsNumeric(v) Then
        MsgBox "数値を入力してください。"
    ElseIf v < 0 Then
        MsgBox "負の値は使用できません。"
    Else
        MsgBox "入力OKです。"
    End If
End Sub
VB
  • ポイント: 入力の妥当性チェックは「空」「型」「範囲」の順で見るときれい。

ありがちな間違いを避けるコツ

  • ラベル: 「広い条件は後」「狭い条件は先」で整理する
  • 比較: 文字列比較は目視では同じに見えても全角/半角・余計な空白で落ちる
  • 型: セルに日付や数値が入っている前提でも、文字列になっていることがある
  • Elseの保険: 万一の漏れを拾うためのメッセージを用意しておくとデバッグが楽

If..ElseIf と Select Case の使い分け

  • If..ElseIf: 条件が複雑、範囲比較やAND/ORが多いときに強い
  • Select Case: 同じ変数を「値ごとに」分けるときに読みやすい(例:ステータス名ごと)

例(Select Case の方が読みやすいパターン):

Select Case Range("A2").Value
    Case "完了": MsgBox "OK"
    Case "保留": MsgBox "確認中"
    Case "エラー": MsgBox "要対応"
    Case Else: MsgBox "不明"
End Select
VB

ミニ練習問題

  • 問題1: B2の数値が「100以上で“特A”」「80以上で“A”」「60以上で“B”」「それ以外“C”」となるメッセージを出すマクロを書いてください。
  • 問題2: A2の文字列が「新規」「進行」「完了」「中止」のいずれかでメッセージを変え、該当しないときは「未設定」と表示するコードを書いてください。
  • 問題3: C2の日付が「過去」「今日」「未来」で分岐し、未来の場合に「残り日数」を MsgBox で表示してください(ヒント:due - Date)。

ミニ練習問題 の解答例と解説

いいですね!では、先ほど出した ミニ練習問題 の解答例と解説を順番に示します。初心者でも理解しやすいように、コードと一緒に「なぜそう書くのか」を丁寧に説明します。

✅ 問題1:点数による評価判定

条件:

  • 100以上 → 「特A」
  • 80以上 → 「A」
  • 60以上 → 「B」
  • それ以外 → 「C」

解答例:

Sub ScoreJudge()
    Dim score As Integer
    score = Range("B2").Value   ' B2セルの点数を読み取る
    
    If score >= 100 Then
        MsgBox "評価:特A"
    ElseIf score >= 80 Then
        MsgBox "評価:A"
    ElseIf score >= 60 Then
        MsgBox "評価:B"
    Else
        MsgBox "評価:C"
    End If
End Sub
VB

解説:

  • 条件は「大きい方から順番に」書くのが鉄則。
  • もし score >= 60 を先に書いてしまうと、80点や100点も「B」で止まってしまいます。
  • なので「特A → A → B → それ以外」の順に並べるのが正解。

✅ 問題2:文字列によるステータス判定

条件:

  • 「新規」→「新規案件です」
  • 「進行」→「進行中です」
  • 「完了」→「完了しました」
  • 「中止」→「中止されました」
  • それ以外 → 「未設定」

解答例:

Sub StatusCheck()
    Dim status As String
    status = Range("A2").Value   ' A2セルの文字列を読み取る
    
    If status = "新規" Then
        MsgBox "新規案件です"
    ElseIf status = "進行" Then
        MsgBox "進行中です"
    ElseIf status = "完了" Then
        MsgBox "完了しました"
    ElseIf status = "中止" Then
        MsgBox "中止されました"
    Else
        MsgBox "未設定"
    End If
End Sub
VB

解説:

  • 文字列比較は「完全一致」。スペースや全角/半角の違いで判定が外れることがあるので注意。
  • Else を最後に置くことで、想定外の入力を拾えるようにしている。

✅ 問題3:日付による締切判定

条件:

  • 過去の日付 → 「締切を過ぎています」
  • 今日の日付 → 「締切は今日です」
  • 未来の日付 → 「締切まであと○日です」

解答例:

Sub DeadlineCheck()
    Dim due As Date
    due = Range("C2").Value   ' C2セルの締切日を読み取る
    
    If due < Date Then
        MsgBox "締切を過ぎています"
    ElseIf due = Date Then
        MsgBox "締切は今日です"
    Else
        MsgBox "締切まであと " & (due - Date) & " 日です"
    End If
End Sub
VB

解説:

  • Date は「今日の日付」を返す便利な関数。
  • 日付同士の引き算は「日数の差」として計算できる。
  • 未来の場合 (due - Date) で残り日数を表示できる。

まとめ

  • If..ElseIf は「上から順に判定」される → 条件の順番が超重要
  • 数値判定は範囲の広い条件を後ろに回す
  • 文字列判定は完全一致 → 入力ミスや余計なスペースに注意
  • 日付判定は Date を使うと便利

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました