初心者向けにやさしく、たっぷり例題つきで解説します。実際にコピペして試せる Excel VBA の If 文(基本・応用・落とし穴・練習問題+解答)を一気にまとめます。
If 文って何?(超かんたん)
If 文は「もし〜ならば」をプログラムで表す道具です。Excel のセルや変数の中身を調べて、条件に合うときだけ別の処理を行えます。日常で言うと「もし雨なら傘を持っていく。そうでなければ帽子をかぶる。」が If 文です。
基本構文(フルブロック)
If 条件式 Then
' 条件が True のときの処理
End If
VB例:セル B2 が 70 より大きければメッセージ
Sub CheckScore()
If Range("B2").Value > 70 Then
MsgBox "70点より上です。"
End If
End Sub
VBElse を使う(True / False を分ける)
If 条件式 Then
' True のとき
Else
' False のとき
End If
VB例:合否メッセージ
Sub PassOrFail()
If Range("B2").Value >= 70 Then
MsgBox "合格です"
Else
MsgBox "不合格です"
End If
End Sub
VBElseIf(複数の分岐)
点数で A/B/C/F 判定する例:
Sub GradeJudge()
Dim s As Long
s = Range("B2").Value
If s >= 90 Then
MsgBox "A"
ElseIf s >= 80 Then
MsgBox "B"
ElseIf s >= 70 Then
MsgBox "C"
Else
MsgBox "F"
End If
End Sub
VBポイント:上から順に評価され、最初に True になったブロックだけ実行されます。
1行 If(簡易記法)
短い処理なら 1 行で書けます(End If 不要)。
If Range("B2").Value > 70 Then MsgBox "70点より上です"
VB注意:Else を使うときの 1 行書きは構文が少し違い、可読性を損なうことがあるので多用は避ける。
複数条件(And / Or / Not)
And:両方とも True のときOr:どちらか一方が True のときNot:条件を反転
例:80〜100 且つ欠席でない(仮想フラグ)
If score >= 80 And isPresent = True Then
MsgBox "優秀(出席あり)"
End If
VB入れ子(ネスト)If
条件の中でさらに条件を分けたいとき:
If x > 0 Then
If x > 10 Then
MsgBox "10より大きい正の数"
Else
MsgBox "正だけど10以下"
End If
End If
VBただし深くネストすると読みにくくなるので、論理の整理(ElseIf や別関数に切り出す)を検討。
実践例:セルの色を条件で変える(実行して体感)
Sub ColorByScore()
Dim s As Variant
s = Range("B2").Value
If IsNumeric(s) = False Then
MsgBox "数値を入力してください"
Exit Sub
End If
If s >= 90 Then
Range("B2").Interior.ColorIndex = 4 ' 緑
ElseIf s >= 70 Then
Range("B2").Interior.ColorIndex = 6 ' 黄色
Else
Range("B2").Interior.ColorIndex = 3 ' 赤
End If
End Sub
VB使い方:B2 に点数を入れてマクロを実行すると色が変わります。
よくあるミスと注意点(初心者がはまりやすい)
- End If を忘れる
ブロック形式なら必ずEnd Ifが必要(1 行 If を使う場合は不要)。 - 比較演算子に注意
VBA では等号は=(==は使わない)。
例:If x = 5 Then(正) - 文字列比較は大文字小文字を区別しない(既定)
"abc" = "ABC"は True(大文字小文字を区別したい場合はStrCompを使う)。 - オブジェクト比較
オブジェクトの同一性を調べるときはIs演算子を使う(例:If obj Is Nothing Then)。 - Null / Empty / 空文字の判定
IsEmpty(x):変数が初期化されていない(Empty)かIsNull(x):データベースからの Null などx = "":空文字列の判定
それぞれ目的に合わせて使う。混同しない。
- 型が違うとエラーになることがある
例:数値比較のつもりで文字列が入っていると意図しない比較に。IsNumericでチェックすると安全。
デバッグのヒント
MsgBoxやDebug.Printで条件の前後の値を表示して確認する。- ブレークポイント(VBE 上で行クリック)を使ってステップ実行(F8)して動作を追う。
図で理解(テキストベース)
If 〜 Then ~ Else の流れ:
[開始]
↓
[条件式を評価]
├─ True ─→ [Then の処理] ─→ [終了]
└─ False ─→ [Else の処理(あれば)] ─→ [終了]
ElseIf の流れ(上から順に判定):
[条件1?] ─ True → 実行 → 終了
└─ False → [条件2?] ─ True → 実行 → 終了
└─ False → ... → [Else]
練習問題
- B2 に入力した数が偶数なら「偶数です」、奇数なら「奇数です」と表示するマクロを書いてください。
- A2 が空の場合は「未入力」と表示、そうでなければ A2 の値を表示するマクロを書いてください。
- B2 の点数で 60 点未満:赤、60〜79:黄色、80 以上:緑 にセルの色を変えるマクロを作ってください。
練習問題の解答例
Sub EvenOrOdd()
Dim n As Variant
n = Range("B2").Value
If Not IsNumeric(n) Then
MsgBox "数値を入れてください"
Exit Sub
End If
If n Mod 2 = 0 Then
MsgBox "偶数です"
Else
MsgBox "奇数です"
End If
End Sub
VB(Mod は整数の剰余)
Sub CheckA2()
If Trim(Range("A2").Value) = "" Then
MsgBox "未入力"
Else
MsgBox "入力値: " & Range("A2").Value
End If
End Sub
VB(Trim は空白だけの入力を無視するために有用)
Sub ColorByScore2()
Dim s As Variant
s = Range("B2").Value
If Not IsNumeric(s) Then
MsgBox "数値を入れてください"
Exit Sub
End If
If s < 60 Then
Range("B2").Interior.ColorIndex = 3 ' 赤
ElseIf s < 80 Then
Range("B2").Interior.ColorIndex = 6 ' 黄
Else
Range("B2").Interior.ColorIndex = 4 ' 緑
End If
End Sub
VBまとめ(初心者に伝えたいポイント)
- If 文は「条件に応じて処理を分ける」ための基本中の基本。まずは単純な True/False を動かして慣れる。
ElseIfとElseを使えば複雑な判定も順序立てて書ける。- 型チェック(IsNumeric / IsEmpty 等)を最初に入れると実行時エラーを減らせる。
- 実際にセルを変化させる(色を変える、値を書き換える)サンプルで試すと理解が早い。
- エラーが出たら
Debug.Printとステップ実行(F8)で値と流れを追ってみよう。

