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

VBA
スポンサーリンク

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
  • ポイント: IfEnd 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」と表示されていても、文字列の場合がある。数値として判定したいならCLngValで明示的に変換。
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を忘れていないか: 構文エラーの定番。
  • セル参照が合っているか: シートやセルの指定ミスがないか。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました