【VBA】検索対象のすべてのセルを見つけて一括処理する方法|FindとFindNextの繰り返し活用

VBAで「特定の文字列を含むセルがシート内に複数ある」場合、それらを1つずつ探し出して処理したいことがあります。
そのようなときに活躍するのが、Find 関数と FindNext 関数の組み合わせです。

本記事では、「森」という文字列を含むセルをすべて検索し、件数を表示する例を用いて、実用的なコードとその仕組みを解説いたします。


目次

コード例:文字列「森」をすべて検索して件数を数える

Dim targetCell As Range
Dim firstHit As Range
Dim allMatches As Range

Set targetCell = Cells.Find(What:="森")
If targetCell Is Nothing Then
    MsgBox "「森」が見つかりませんでした。"
    Exit Sub
Else
    Set firstHit = targetCell
    Set allMatches = targetCell
End If

Do
    Set targetCell = Cells.FindNext(targetCell)
    If targetCell.Address = firstHit.Address Then
        Exit Do
    Else
        Set allMatches = Union(allMatches, targetCell)
    End If
Loop

MsgBox "「森」が " & allMatches.Count & " 件見つかりました。"

コードの解説

1. Find で最初の一致セルを検索

Set targetCell = Cells.Find(What:="森")
  • ワークシート全体から「森」を含む最初のセルを検索します。
  • 見つからなかった場合は Nothing が返されるため、事前チェックを行います。

2. 検索ループの準備

  • firstHit:最初に見つかったセル(ループの終了条件に使用)
  • allMatches:見つかったセルをまとめるための集合(Unionで追加)

3. FindNext によるループ処理

Set targetCell = Cells.FindNext(targetCell)
  • Find で見つかった位置から順に次の一致セルを探します。
  • 最初に見つかったセル(firstHit)に戻ったらループ終了。

4. 一致セルの集合化と件数表示

Set allMatches = Union(allMatches, targetCell)
  • 各一致セルを Union で結合し、まとめて操作可能にします。
  • .Count を使って見つかったセル数をカウントします。

応用:検索対象に書式を適用する

見つかったセルすべてに太字や背景色を適用したい場合、次のように書けます。

allMatches.Font.Bold = True
allMatches.Interior.Color = RGB(255, 255, 200)

よくある注意点

内容解説
Find の結果が Nothing のときエラー回避のため必ずチェックする
Union の使用最初のセルを基準に範囲を拡張する
FindNext の終了条件最初に見つかったセル(firstHit)と同じアドレスで終了すること

まとめ

処理内容使用構文解説
最初の一致セルを検索Cells.Find(What:="森")見つからない場合に備えたエラーハンドリングが必要
次の一致セルを取得FindNext最初のセルと比較してループ終了を判定
複数セルをまとめるUnion一括処理を可能にする
件数をカウント.Count一致セル数を取得

このように FindFindNext を正しく使いこなすことで、複数の一致セルを自動で検出・一括処理するマクロを簡潔に実装できます。
データ分析、検索レポート作成、検査・強調処理など、あらゆる業務に応用可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次