Excel VBA | データ検出(Offset × 条件分岐 × Find)の黄金パターン集

VBA
スポンサーリンク

ここでは 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」パターン集を使えば、売上表・勤怠表・在庫表などの 異常値検出・品質管理 を一瞬で自動化できます。

タイトルとURLをコピーしました