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 | 一致セル数を取得 |
このように Find と FindNext を正しく使いこなすことで、複数の一致セルを自動で検出・一括処理するマクロを簡潔に実装できます。
データ分析、検索レポート作成、検査・強調処理など、あらゆる業務に応用可能です。
IT・ガジェット・電子工作の知識をこれひとつで

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。
PCアプリの操作解説、最新のガジェット情報、そして電子工作の専門書まで。 Kindle Unlimitedなら、あらゆるジャンルのIT・デジタル関連書籍が読み放題です。
「仕事の効率化」から「趣味の深掘り」まで、高価な専門書をわざわざ買わずに、必要な情報をその場で引き出せるのが最大のメリット。 現在は30日間の無料体験や、対象者限定の「3ヶ月499円」プランなどが用意されています。まずはご自身のアカウントでお得なオファーが表示されるかご確認ください。
