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

【VBA】条件に一致するセルを複数取得する方法|Find・For Each・SpecialCells

Excelでデータを扱っているときに「条件に一致するセルを一括で取得したい」という場面は非常に多いです。例えば「売上が100以上のセルをすべて探したい」「商品名に『りんご』を含むセルだけを抽出したい」といったケースです。手作業の検索やフィルターでも対応可能ですが、繰り返しの作業を自動化するならExcelVBAで条件一致セルをまとめて取得するのが効率的です。

この記事では「vba 条件に一致するセルを取得 複数」をテーマに、初心者でも分かりやすい基本の書き方から、実務で役立つ応用サンプルまでを丁寧に解説します。FindFor EachSpecialCellsなどの手法を比較しながら、最適な選び方も紹介します。

✅ 条件一致セルを複数取得する3つの基本アプローチ

・Find+FindNextを使う

Excelの検索機能を呼び出す方法で、高速かつ効率的。複数セルを探す場合はFindNextを組み合わせます。

・For Each+Ifを使う

セルを順番に走査し、条件を判定する方法。処理はやや遅いですが複雑条件に強いです。

・SpecialCellsを使う

空白やエラーなどExcelが持つ特殊条件に基づいて一括でセルを取得できます。


✅ Find+FindNextで条件一致セルを取得する

・基本構文

Sub FindMultipleCells()
    Dim rng As Range
    Dim firstAddress As String
    
    With Range("A1:A100")
        Set rng = .Find("りんご", LookAt:=xlPart)
        If Not rng Is Nothing Then
            firstAddress = rng.Address
            Do
                Debug.Print "ヒット:" & rng.Address & " 値=" & rng.Value
                Set rng = .FindNext(rng)
            Loop While Not rng Is Nothing And rng.Address <> firstAddress
        End If
    End With
End Sub

手順

  1. 検索範囲を指定(例:A1:A100)。
  2. Findで検索語を指定。
  3. 最初の一致セルのアドレスを保存。
  4. FindNextで次の一致セルを順に取得。
  5. 最初のセルに戻ったら終了。

実務例


✅ For Each+Ifで条件一致セルを走査する

・基本コード

Sub LoopCheckCells()
    Dim c As Range
    For Each c In Range("B2:B100")
        If c.Value >= 100 Then
            Debug.Print "条件一致:" & c.Address & " 値=" & c.Value
        End If
    Next c
End Sub

手順

  1. 範囲内のセルを1つずつループ。
  2. Ifで条件判定(例:100以上)。
  3. 一致すれば処理を実行。

    参考:【VBA】For Each を使ったセル範囲の操作方法

    参考:【VBA】セルに特定の文字が入っていた場合にIF文で複数条件を処理する方法

利点

  • 柔軟な条件式を追加できる。
  • 複数列の値を組み合わせた判定も可能。

実務例

  • 「商品名がりんご かつ 売上が100以上」のセルを抽出。
  • 「日付が本日 かつ ステータスが未処理」のセルをチェック。

✅ SpecialCellsで条件一致セルをまとめて取得

・空白セルを取得

Sub GetBlanks()
    Dim rng As Range
    On Error Resume Next
    Set rng = Range("A1:A100").SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0
    
    If Not rng Is Nothing Then
        rng.Select
        MsgBox "空白セルを選択しました"
    End If
End Sub

参考:【VBA】特定のセル(空白セル・数式セル・エラーセル)を見つけ出す:SpecialCells メソッド

・数式セルを取得

Range("A1:A100").SpecialCells(xlCellTypeFormulas).Interior.Color = vbYellow

・エラーセルを取得

Range("A1:A100").SpecialCells(xlCellTypeFormulas, xlErrors).Interior.Color = vbRed

利点

  • 一括でセルを取得でき、処理が非常に速い。
  • エラーや空白チェックに強い。

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

・条件一致セルを色付けする

Sub HighlightCells()
    Dim c As Range
    For Each c In Range("B2:B100")
        If InStr(c.Value, "限定") > 0 Then
            c.Interior.Color = vbYellow
        End If
    Next c
End Sub

参考:【VBA】条件に一致するセルを取得する方法|Find・For Each・SpecialCells

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

Sub ExportMatches()
    Dim c As Range, wsOut As Worksheet
    Dim r As Long
    Set wsOut = Sheets("抽出結果")
    r = 1
    
    For Each c In Range("A2: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 CopyMatchedRows()
    Dim rng As Range, firstAddress As String, wsOut As Worksheet
    Dim r As Long
    Set wsOut = Sheets("結果")
    r = 1
    
    With Range("A1:A100")
        Set rng = .Find("確認", LookAt:=xlPart)
        If Not rng Is Nothing Then
            firstAddress = rng.Address
            Do
                rng.EntireRow.Copy wsOut.Rows(r)
                r = r + 1
                Set rng = .FindNext(rng)
            Loop While Not rng Is Nothing And rng.Address <> firstAddress
        End If
    End With
End Sub

参考:【VBA】特定の文字を含む行の処理:検索・削除・別シートにコピー

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

Sub CountMatches()
    Dim c As Range, cnt As Long
    cnt = 0
    For Each c In Range("B2:B100")
        If c.Value >= 200 Then
            cnt = cnt + 1
        End If
    Next c
    MsgBox "条件に一致するセル数:" & cnt
End Sub

✅ 条件一致セル取得での注意点

  1. Nothing判定を必ず入れる
  2. 部分一致と完全一致の違いを理解する
  3. SpecialCellsは対象がないとエラー
  4. 処理速度を考慮する
    • 数万行規模のデータではFindが高速。
    • 複雑条件はFor Eachが柔軟。
    • 空白やエラーはSpecialCellsが効率的。

✅ 条件一致セル取得の使い分け方

  • 高速検索したい場合Find
  • 複雑条件で判定したい場合For Each+If
  • 空白やエラーをまとめて処理したい場合SpecialCells

実務ではこれらを組み合わせて使うのが効果的です。


■ まとめ:条件一致セルを複数取得して業務を効率化しよう

  • Find+FindNextで高速に複数セルを取得できる。
  • For Each+Ifは柔軟で複雑条件に対応可能。
  • SpecialCellsは空白やエラーなど特定条件のセルを一括取得できる。
  • 実務では「色付け」「コピー」「件数カウント」と組み合わせると便利。
  • Nothing判定やエラー処理を組み込むことで安定したコードになる。

ExcelVBAで条件一致セルを複数取得する方法をマスターすれば、大量データから必要な情報を素早く抽出でき、日常業務の効率化に大きく役立ちます。ぜひ本記事のサンプルを活用して、自分の業務に合った自動化を実現してみてください。

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