Excel VBA | If文を使った条件分岐

VBA
スポンサーリンク

初心者向けにやさしく、たっぷり例題つきで解説します。実際にコピペして試せる 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
VB

Else を使う(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
VB

ElseIf(複数の分岐)

点数で 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 に点数を入れてマクロを実行すると色が変わります。

よくあるミスと注意点(初心者がはまりやすい)

  1. End If を忘れる
    ブロック形式なら必ず End If が必要(1 行 If を使う場合は不要)。
  2. 比較演算子に注意
    VBA では等号は === は使わない)。
    例:If x = 5 Then(正)
  3. 文字列比較は大文字小文字を区別しない(既定)
    "abc" = "ABC" は True(大文字小文字を区別したい場合は StrComp を使う)。
  4. オブジェクト比較
    オブジェクトの同一性を調べるときは Is 演算子を使う(例:If obj Is Nothing Then)。
  5. Null / Empty / 空文字の判定
    • IsEmpty(x):変数が初期化されていない(Empty)か
    • IsNull(x):データベースからの Null など
    • x = "":空文字列の判定
      それぞれ目的に合わせて使う。混同しない。
  6. 型が違うとエラーになることがある
    例:数値比較のつもりで文字列が入っていると意図しない比較に。IsNumeric でチェックすると安全。

デバッグのヒント

  • MsgBoxDebug.Print で条件の前後の値を表示して確認する。
  • ブレークポイント(VBE 上で行クリック)を使ってステップ実行(F8)して動作を追う。

図で理解(テキストベース)

If 〜 Then ~ Else の流れ:

[開始]
   ↓
[条件式を評価]
   ├─ True ─→ [Then の処理] ─→ [終了]
   └─ False ─→ [Else の処理(あれば)] ─→ [終了]

ElseIf の流れ(上から順に判定):

[条件1?] ─ True → 実行 → 終了
    └─ False → [条件2?] ─ True → 実行 → 終了
                       └─ False → ... → [Else]

練習問題

  1. B2 に入力した数が偶数なら「偶数です」、奇数なら「奇数です」と表示するマクロを書いてください。
  2. A2 が空の場合は「未入力」と表示、そうでなければ A2 の値を表示するマクロを書いてください。
  3. 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 を動かして慣れる。
  • ElseIfElse を使えば複雑な判定も順序立てて書ける。
  • 型チェック(IsNumeric / IsEmpty 等)を最初に入れると実行時エラーを減らせる。
  • 実際にセルを変化させる(色を変える、値を書き換える)サンプルで試すと理解が早い。
  • エラーが出たら Debug.Print とステップ実行(F8)で値と流れを追ってみよう。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました