VBAで自動化 VBA一覧 抽出・検索処理 検索・Findメソッド

【VBA】セルの値が一致したら処理を実行する方法|If文・ループ・実務活用例

Excelを使った業務では「セルの値が特定の条件と一致したら処理を行いたい」という場面が頻繁にあります。例えば「売上が100以上なら色付け」「顧客IDが一致したらデータをコピー」「日付が今日ならメール送信」といった処理です。手作業でも可能ですが、繰り返し行う場合はExcelVBAで自動化した方が効率的です。

この記事では「vba セルの値が一致したら」をテーマに、基本のIf文から複数セルのループ処理、応用的な実務サンプルまで解説します。初心者でも理解できるように手順を丁寧に紹介し、実務で役立つ使い方を紹介していきます。

✅ セルの値が一致したら処理を実行する基本(If文)

・単一セルでの一致判定

最も基本的な方法はIf文を使って「セルの値=比較対象」を判定する方法です。

Sub CheckCellValue()
    If Range("A1").Value = "完了" Then
        MsgBox "セルA1が完了と一致しました"
    End If
End Sub

手順

  1. 判定したいセルを指定(例:A1)。
  2. If文で「セルの値=比較値」を記述。
  3. 一致したら処理を実行。

補足


✅ 複数セルをループでチェックする方法

・For Eachで全セルを判定

Sub LoopCells()
    Dim c As Range
    For Each c In Range("A1:A10")
        If c.Value = "完了" Then
            Debug.Print "一致セル:" & c.Address
        End If
    Next c
End Sub

手順

  1. 判定範囲を指定(例:A1:A10)。
  2. For Eachでセルを順に処理。
  3. If文で一致判定し、処理を実行。

    参考:【VBA】Endメソッド:最終行と最終列数


・行全体を処理する例

Sub CopyRowIfMatch()
    Dim c As Range, wsOut As Worksheet
    Dim r As Long
    Set wsOut = Sheets("結果")
    r = 1
    
    For Each c In Range("A1:A100")
        If c.Value = "山田" Then
            c.EntireRow.Copy wsOut.Rows(r)
            r = r + 1
        End If
    Next c
End Sub

→ 一致セルの行全体を別シートへコピー。

参考:【VBA】UsedRangeプロパティ:最終行と最終列数


✅ 部分一致でセルを判定する

・InStrを使う

Sub PartialMatch()
    Dim c As Range
    For Each c In Range("B1:B50")
        If InStr(c.Value, "りんご") > 0 Then
            c.Interior.Color = vbYellow
        End If
    Next c
End Sub

→ 「青りんご」「りんごジュース」なども対象。

参考:【VBA】(セル内)特定の文字の最初の位置を検索(InStr関数の使用方法)


✅ 数値条件で一致判定する

・売上が100以上の場合

Sub CheckNumber()
    Dim c As Range
    For Each c In Range("C1:C20")
        If c.Value >= 100 Then
            c.Interior.Color = vbGreen
        End If
    Next c
End Sub

・日付条件を使う

Sub CheckDate()
    If Range("D1").Value = Date Then
        MsgBox "セルD1は本日の日付です"
    End If
End Sub

参考:【VBA】日付を判定する方法:IsDate・VarType・DateValue・CDate

✅ 複数条件を組み合わせて判定する

・AND条件

If Range("A1").Value = "山田" And Range("B1").Value = "営業" Then
    MsgBox "山田さんが営業部に所属しています"
End If

・OR条件

If Range("A1").Value = "未処理" Or Range("A1").Value = "確認中" Then
    MsgBox "処理が未完了です"
End If

参考:【Excel】IF関数で複数条件を指定する方法とは?AND・OR・IFSまで完全ガイド!

✅ 実務で役立つ応用サンプル

・一致セルを色付け

Sub HighlightMatches()
    Dim c As Range
    For Each c In Range("A1:A100")
        If c.Value = "エラー" Then
            c.Interior.Color = vbRed
        End If
    Next c
End Sub

・一致セルの件数をカウント

Sub CountMatches()
    Dim c As Range, cnt As Long
    cnt = 0
    For Each c In Range("A1:A100")
        If c.Value = "完了" Then
            cnt = cnt + 1
        End If
    Next c
    MsgBox "完了の件数:" & cnt
End Sub

参考:【VBA】数値セル・特定の文字列のセル・値のセルなどのセル数のカウント方法

・一致セルを別シートに出力

Sub ExportMatches()
    Dim c As Range, wsOut As Worksheet
    Dim r As Long
    Set wsOut = Sheets("抽出")
    r = 1
    
    For Each c In Range("A1:A100")
        If c.Value = "重要" Then
            wsOut.Cells(r, 1).Value = c.Value
            wsOut.Cells(r, 2).Value = c.Address
            r = r + 1
        End If
    Next c
End Sub

参考:【VBA】複数条件でデータ抽出する方法

・一致セルの行を削除

Sub DeleteMatchedRows()
    Dim i As Long
    For i = 100 To 1 Step -1
        If Cells(i, 1).Value = "削除" Then
            Rows(i).Delete
        End If
    Next i
End Sub

→ 逆順ループにすることで削除後の行ズレを防止。


✅ セル一致判定でよくあるトラブルと対策

・Nothing判定を忘れる

Findを使う場合、一致がなければNothingを返すため必ず判定が必要。

参考:【VBA】Findの戻り値を理解する方法|Nothing判定と実務での活用例を解説

・全角半角やスペースで一致しない

見た目が同じでも異なる文字として扱われます。
TrimReplaceで前処理を行う。
参考:【VBA】Replace関数でスペース(半角:全角)を削除する方法

・数値と文字列の違い

「100」と入力されていても文字列扱いだと数値判定で一致しない。
CStrCLngで型を揃える。
参考:【VBA】変数のデータ型変換(型変換)の方法と注意点


✅ セル一致処理の使い分けまとめ

  • 単純一致ならIf文
  • 複数セルを対象にするならFor Each
  • 部分一致ならInStr
  • 数値や日付の条件も組み合わせ可能

■ まとめ:セルの値一致判定を自在に活用しよう

  • If文でセルの値と比較して一致判定ができる。
  • 範囲全体を対象にする場合はFor Each+Ifで処理。
  • 部分一致はInStr、数値や日付の判定も可能。
  • 実務では「色付け」「コピー」「件数カウント」「削除」との組み合わせが有効。
  • 型の違いやスペースの有無に注意し、安定した一致判定を行う。

ExcelVBAでセルの値が一致したら処理を実行する方法を習得すれば、日常のデータ処理を効率化でき、人的ミスの削減にもつながります。ぜひ本記事のサンプルを活用して、自分の業務に応じた自動化を進めてみてください。

    -VBAで自動化, VBA一覧, 抽出・検索処理, 検索・Findメソッド