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を使うと便利
