Excelを使った業務では「セルの値が特定の条件と一致したら処理を行いたい」という場面が頻繁にあります。例えば「売上が100以上なら色付け」「顧客IDが一致したらデータをコピー」「日付が今日ならメール送信」といった処理です。手作業でも可能ですが、繰り返し行う場合はExcelVBAで自動化した方が効率的です。
この記事では「vba セルの値が一致したら」をテーマに、基本のIf文から複数セルのループ処理、応用的な実務サンプルまで解説します。初心者でも理解できるように手順を丁寧に紹介し、実務で役立つ使い方を紹介していきます。
目次
- ✅ セルの値が一致したら処理を実行する基本(If文)
- ・単一セルでの一致判定
- ✅ 複数セルをループでチェックする方法
- ・For Eachで全セルを判定
- ・行全体を処理する例
- ✅ 部分一致でセルを判定する
- ・InStrを使う
- ✅ 数値条件で一致判定する
- ・売上が100以上の場合
- ・日付条件を使う
- ✅ 複数条件を組み合わせて判定する
- ・AND条件
- ・OR条件
- ✅ 実務で役立つ応用サンプル
- ・一致セルを色付け
- ・一致セルの件数をカウント
- ・一致セルを別シートに出力
- ・一致セルの行を削除
- ✅ セル一致判定でよくあるトラブルと対策
- ・Nothing判定を忘れる
- ・全角半角やスペースで一致しない
- ・数値と文字列の違い
- ✅ セル一致処理の使い分けまとめ
- ■ まとめ:セルの値一致判定を自在に活用しよう
✅ セルの値が一致したら処理を実行する基本(If文)
・単一セルでの一致判定
最も基本的な方法はIf文を使って「セルの値=比較対象」を判定する方法です。
Sub CheckCellValue()
If Range("A1").Value = "完了" Then
MsgBox "セルA1が完了と一致しました"
End If
End Sub
手順
- 判定したいセルを指定(例:A1)。
- If文で「セルの値=比較値」を記述。
- 一致したら処理を実行。
補足
<>を使えば「一致しない場合」の処理も可能。AndやOrを使って複数条件を組み合わせることもできます。
✅ 複数セルをループでチェックする方法
・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
手順
- 判定範囲を指定(例:A1:A10)。
- For Eachでセルを順に処理。
- If文で一致判定し、処理を実行。
・行全体を処理する例
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判定と実務での活用例を解説
・全角半角やスペースで一致しない
見た目が同じでも異なる文字として扱われます。
→ TrimやReplaceで前処理を行う。
参考:【VBA】Replace関数でスペース(半角:全角)を削除する方法
・数値と文字列の違い
「100」と入力されていても文字列扱いだと数値判定で一致しない。
→ CStrやCLngで型を揃える。
参考:【VBA】変数のデータ型変換(型変換)の方法と注意点
✅ セル一致処理の使い分けまとめ
- 単純一致ならIf文
- 複数セルを対象にするならFor Each
- 部分一致ならInStr
- 数値や日付の条件も組み合わせ可能
■ まとめ:セルの値一致判定を自在に活用しよう
If文でセルの値と比較して一致判定ができる。- 範囲全体を対象にする場合はFor Each+Ifで処理。
- 部分一致はInStr、数値や日付の判定も可能。
- 実務では「色付け」「コピー」「件数カウント」「削除」との組み合わせが有効。
- 型の違いやスペースの有無に注意し、安定した一致判定を行う。
ExcelVBAでセルの値が一致したら処理を実行する方法を習得すれば、日常のデータ処理を効率化でき、人的ミスの削減にもつながります。ぜひ本記事のサンプルを活用して、自分の業務に応じた自動化を進めてみてください。