ここでは Offset × 条件分岐 × Find を組み合わせて「セル範囲から特定の値や条件に合致するデータを検出し、結果を隣列や下段に出力する」黄金パターンをまとめます。Range.Find を活用することで、ループよりも高速に検索・検出が可能になります。
基本パターン 10選
1. 特定文字列を検出して右隣に印を付ける
Dim rng As Range, f As Range
Set rng = Range("A2:A20")
Set f = rng.Find("NG", LookAt:=xlPart)
If Not f Is Nothing Then
f.Offset(0, 1).Value = "検出"
End If
VB👉 「NG」を含むセルを検出して右隣に「検出」と出力。
2. 数値が100以上のセルを検出
Dim rng As Range, f As Range
Set rng = Range("B2:B20")
Set f = rng.Find(What:="100", LookAt:=xlWhole, SearchOrder:=xlByRows)
If Not f Is Nothing And f.Value >= 100 Then
f.Offset(0, 1).Value = "100以上"
End If
VB👉 100以上のセルを検出して右隣にラベル付け。
3. 空白セルを検出
Dim rng As Range, f As Range
Set rng = Range("C2:C20")
Set f = rng.Find(What:="", LookAt:=xlWhole)
If Not f Is Nothing Then
f.Offset(0, 1).Value = "空白検出"
End If
VB👉 空白セルを検出して右隣に「空白検出」と出力。
4. 日付セルを検出
Dim rng As Range, f As Range
Set rng = Range("D2:D20")
Set f = rng.Find(What:="*", LookAt:=xlPart)
If Not f Is Nothing And IsDate(f.Value) Then
f.Offset(0, 1).Value = "日付検出"
End If
VB👉 日付セルを検出して右隣に「日付検出」と出力。
5. エラー値を検出
Dim rng As Range, f As Range
Set rng = Range("E2:E20")
Set f = rng.Find(What:="*", LookAt:=xlPart)
If Not f Is Nothing And IsError(f.Value) Then
f.Offset(0, 1).Value = "エラー検出"
End If
VB👉 エラー値を検出して右隣に「エラー検出」と出力。
6. 特定パターン(郵便番号形式)を検出
Dim rng As Range, f As Range
Set rng = Range("F2:F20")
Set f = rng.Find("-", LookAt:=xlPart)
If Not f Is Nothing And Len(f.Value) = 8 Then
f.Offset(0, 1).Value = "郵便番号形式"
End If
VB👉 郵便番号形式(例:123-4567)を検出。
7. 複数一致を順次検出
Dim rng As Range, f As Range, firstAddress As String
Set rng = Range("G2:G20")
Set f = rng.Find("NG", LookAt:=xlPart)
If Not f Is Nothing Then
firstAddress = f.Address
Do
f.Offset(0, 1).Value = "NG検出"
Set f = rng.FindNext(f)
Loop While Not f Is Nothing And f.Address <> firstAddress
End If
VB👉 「NG」を含むセルをすべて検出して右隣にラベル付け。
8. 特定顧客名を検出
Dim rng As Range, f As Range
Set rng = Range("H2:H20")
Set f = rng.Find("山田", LookAt:=xlPart)
If Not f Is Nothing Then
f.Offset(0, 1).Value = "顧客検出"
End If
VB👉 「山田」を含む顧客名を検出。
9. 在庫ゼロを検出
Dim rng As Range, f As Range
Set rng = Range("I2:I20")
Set f = rng.Find(What:=0, LookAt:=xlWhole)
If Not f Is Nothing Then
f.Offset(0, 1).Value = "在庫ゼロ"
End If
VB👉 在庫ゼロのセルを検出して右隣にラベル付け。
10. 条件付き検出(VIP顧客のみ)
Dim rng As Range, f As Range
Set rng = Range("J2:J20")
Set f = rng.Find("VIP", LookAt:=xlPart)
If Not f Is Nothing And f.Offset(0, -1).Value = "顧客" Then
f.Offset(0, 1).Value = "VIP検出"
End If
VB👉 「VIP」かつ左隣が「顧客」の場合のみ検出。
✅ まとめ
- Offset → 検出結果を隣列へ出力
- 条件分岐 → 数値判定・日付判定・エラー判定・パターン判定などを組み合わせ
- Find → 高速に検索・複数一致も
FindNextで処理可能 - 黄金パターン → NGワード検出・空白検出・日付検出・エラー検出・在庫ゼロ検出など
💡 この「データ検出 × Offset × 条件分岐 × Find」パターン集を使えば、売上表・勤怠表・在庫表などの 異常値検出・品質管理 を一瞬で自動化できます。


