If文は「もし〜なら〜する」という、とても人間的な考え方をそのままコードにするだけです。例題を交えながら、ゆっくり丁寧に理解していきましょう。
If文の考え方
- 人間の言葉にすると: 「もしテストの点が70点以上なら合格って表示しよう。そうじゃなければ何もしない。」
- コンピュータに伝えると: 条件が「正しい(True)」ときだけ、指定した処理を実行する仕組み。
基本の書き方
If 条件式 Then
条件がTrueのときに実行する処理
End If
VB- 条件式: 比較や判定(例:
Range("B2").Value >= 70) - True/False: 条件が成り立てばTrue、成り立たなければFalse
まずは一番シンプルな例
例1:B2の点数が70以上なら「合格」を表示
Sub SimplePassCheck()
If Range("B2").Value >= 70 Then
MsgBox "合格です"
End If
End Sub
VB- ポイント:
If〜End Ifの中は、条件がTrueのときだけ動く。
Elseで「そうじゃないとき」も指定する
「合格じゃないときは不合格も表示したい」—そんな時はElseを追加します。
例2:合否をはっきり表示
Sub PassOrFail()
If Range("B2").Value >= 70 Then
MsgBox "合格です"
Else
MsgBox "不合格です"
End If
End Sub
VB- ポイント:
Elseは条件がFalseのときに実行される「もう一つの道」。
ElseIfで複数の条件を段階的に
「90点以上は“優”、70点以上は“良”、それ以外は“不可”」のように、段階別に分けたいときはElseIfを使います。
例3:評価を段階で分ける
Sub Grading()
Dim score As Long
score = Range("B2").Value
If score >= 90 Then
MsgBox "評価:優"
ElseIf score >= 70 Then
MsgBox "評価:良"
Else
MsgBox "評価:不可"
End If
End Sub
VB- ポイント: 上から順に判定され、最初にTrueになったところで止まる。
一行で書くIf(慣れてきたら)
短い処理なら一行で書けます。可読性が下がる場合もあるので初心者は無理しなくてOK。
例4:一行If
If Range("B2").Value = "" Then MsgBox "B2が空です"
VB- ポイント: 複数行の処理を書くなら、基本形を使うほうが読みやすい。
よくあるつまずきポイントと対策
- 数値と文字列の違い: セルに「70」と表示されていても、文字列の場合がある。数値として判定したいなら
CLngやValで明示的に変換。
Dim score As Long
score = Val(Range("B2").Value)
If score >= 70 Then MsgBox "合格"
VB- 空欄のときのエラー回避: まず空欄チェックを先に。
If Range("B2").Value = "" Then
MsgBox "点数が未入力です"
ElseIf Val(Range("B2").Value) >= 70 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If
VB- 条件の順番: 上から判定されるので、範囲の広い条件を先に書くと他が実行されないことがある。広い条件は後、狭い条件を先に。
現場で使えるちょい実用例
例5:複数セルをまとめて判定して色付け
B2:B11の点数をチェックして、合格なら緑、不合格なら赤にします。
Sub ColorByScore()
Dim rng As Range, cell As Range
Set rng = Range("B2:B11")
For Each cell In rng
If cell.Value = "" Then
cell.Interior.ColorIndex = 0 '色なし
ElseIf Val(cell.Value) >= 70 Then
cell.Interior.Color = RGB(180, 230, 180) '薄い緑
Else
cell.Interior.Color = RGB(255, 180, 180) '薄い赤
End If
Next cell
End Sub
VB- ポイント: まず空欄を除外→数値化→色分けの順にすると安全。
例6:文字列条件で分岐
部署名が「営業」なら手当あり、それ以外はなし。
Sub DeptAllowance()
Dim dept As String
dept = Trim(Range("C2").Value)
If UCase(dept) = "営業" Then
MsgBox "営業手当を支給します"
Else
MsgBox "手当はありません"
End If
End Sub
VB- ポイント: 前後の空白は
Trim、大文字・小文字の違いはUCase/LCaseで吸収。
詰まったときの確認リスト
- 条件は正しい型で判定しているか: 数値なら数値化、文字なら文字として比較。
- 範囲が重ならないか:
ElseIfの順番で早めにTrueになっていないか。 - End Ifを忘れていないか: 構文エラーの定番。
- セル参照が合っているか: シートやセルの指定ミスがないか。

