Excel VBAを使うとき、特定の値や文字列をセルの中から検索したい場面は多いですよね。そんなときに活躍するのが VBA Find メソッドです。この記事では、VBA 検索の基本から、複数ヒットの取得、VBA FindNextの使い方、そしてVBA 見つからない場合のエラー対処法までを、初心者にもわかりやすく解説します。
まずはFindメソッドの基礎を知りたい方は、VBA Findメソッドの基本構文解説を読むと理解が深まります。
VBAのFindメソッドとは?|セルを検索するための基本機能
Findメソッドの役割と仕組み
Findメソッドは、指定した範囲の中から特定の値や文字列を検索して、該当するセルを返す機能です。Excelの検索(Ctrl+F)機能をプログラムで再現できる便利な命令です。
Excel上での検索・操作との違い
Excelの検索は画面上で対話的に使う機能ですが、VBAのFindはマクロ内で自動的に条件を指定し、結果を操作できます。つまり「自動で検索 → 結果を使って処理」が可能です。
Rangeオブジェクトでの検索の基本構文
基本的な書き方は次の通りです。
Range("範囲").Find(What:="検索文字")
Findメソッドの基本的な使い方は、Excel VBA Findメソッド 基本から応用まででも実例付きで解説されています。
Dim r As Range
Set r = Range("A1:A10").Find(What:="東京")
この例では、A1:A10の範囲内から「東京」という文字列を検索しています。見つかった場合、rには該当するセルが格納されます。
検索範囲・検索対象を指定する方法
Findには多くのオプションがありますが、最も基本的な使い方は次のとおりです。
Set r = Range("A:A").Find(What:="大阪", LookAt:=xlWhole)
- LookAt:=xlWhole … 完全一致で検索
- LookAt:=xlPart … 部分一致で検索
検索結果が見つかった場合、右隣のセルにメッセージを書き込むコードは次のようになります。
If Not r Is Nothing Then r.Offset(0, 1).Value = "見つかりました" End If
複数セルを検索する方法|FindNextとの組み合わせ
Findは最初の一致だけを返します。複数のセルを検索するには、FindNextと組み合わせる必要があります。
この「FindとFindNextを使った複数検索の基本構文」は、Find・FindNextを使った検索処理入門でも丁寧に説明されています。
Dim r As Range, firstCell As String
Set r = Range("A:A").Find(What:="東京")
If Not r Is Nothing Then
firstCell = r.Address
Do
r.Interior.Color = vbYellow ' 該当セルを黄色に塗る
Set r = Range("A:A").FindNext(r)
Loop While Not r Is Nothing And r.Address <> firstCell
End If
無限ループを防ぐポイント
FindNextを使うときは、最初に見つかったセルのアドレスを保存しておき、同じセルに戻った時点でループを終了するのが定石です。
Findメソッドの主な引数と設定項目を理解しよう
| 引数名 | 説明 |
|---|---|
| What | 検索する文字列・必須 |
| After | 検索を始めるセル |
| LookIn | 値、数式、コメントのどれを対象にするか(例:xlValues) |
| LookAt | 完全一致 or 部分一致 |
| SearchOrder | 行方向 or 列方向(xlByRows / xlByColumns) |
| SearchDirection | 次 or 前のセル(xlNext / xlPrevious) |
| MatchCase | 大文字・小文字を区別する(True / False) |
| MatchByte | 全角・半角を区別(日本語環境のみ) |
Findメソッドが見つからないときの原因と対処法
1. 検索対象が存在しない場合のNothingチェック
Set r = Range("A:A").Find(What:="北海道")
If r Is Nothing Then
MsgBox "該当データが見つかりませんでした。"
Else
MsgBox r.Address & " に見つかりました。"
End If
2. 直前の検索条件が引き継がれる問題
FindはExcelの検索ダイアログ設定を引き継ぐ性質があります。意図しない結果を防ぐため、LookAtやLookInなどの引数を毎回明示的に指定しましょう。
3. 空白セルや数値フォーマットの影響
検索対象が数値のとき、文字列として検索しても見つからない場合があります。CStr()で文字列に変換して比較すると安全です。
4. 無限ループを防ぐための安全な書き方
必ず最初のセルを保存し、FindNextのループ終了条件に使いましょう。
実務で使えるFindメソッドの応用例
Sub HighlightCells()
Dim r As Range, firstCell As String
Set r = Range("A:A").Find("エラー", LookAt:=xlPart)
If Not r Is Nothing Then
firstCell = r.Address
Do
r.Interior.Color = vbRed
Set r = Range("A:A").FindNext(r)
Loop While Not r Is Nothing And r.Address <> firstCell
End If
End Sub
また、複数シート検索やOffsetとの組み合わせなど、実務的な応用例もFindメソッドの魅力の一つです。
Findメソッドを使う際の注意点とベストプラクティス
- 検索条件を毎回明示的に指定する(Excel設定の引き継ぎを防止)
- Nothingチェックを習慣化する(エラー防止)
- FindNext使用時はアドレス比較でループ終了(無限ループ防止)
- 範囲を限定して処理速度を上げる(高速化)
まとめ|Findメソッドを使いこなして効率的にセル検索しよう
VBA Findを理解すれば、Excel上での検索作業を自動化し、大幅に効率化できます。また、VBA FindNextを組み合わせることで、複数セルの処理も簡単に実装できます。
- Findは最初の一致セルを返す
- FindNextで複数ヒットを順に検索
- Nothingチェックでエラーを防ぐ
- 検索条件は明示的に指定するのが基本
少しずつコードを書いて試しながら、あなたの業務に合った検索マクロを作ってみましょう。


