VBAでセルを検索したいときに便利なのが、Find
メソッドです。
大量のデータから特定の文字列や数値を見つけ出し、処理を加えることができます。
この記事では、**Findメソッドの基本構文、よく使うパラメータ、繰り返し検索(FindNext)**などをわかりやすく紹介します。
1. Findメソッドとは?
Excel VBAのFind
メソッドは、指定した範囲から条件に一致するセルを検索する機能です。
🔍 フィルターやVLOOKUPよりも柔軟で、検索後のセルに直接アクセス・操作が可能です。
2. 基本構文と引数の説明
よく使う引数だけを説明すると:
引数 | 内容例 | 説明 |
---|---|---|
What | “検索する値” | 検索したい文字列または数値 |
After | 検索開始位置(省略可) | 通常は省略でOK |
LookIn | xlValues, xlFormulas | 値か数式か |
LookAt | xlWhole, xlPart | 完全一致 or 部分一致 |
SearchOrder | xlByRows, xlByColumns | 行方向 or 列方向 |
MatchCase | True / False | 大文字・小文字を区別するか |
3. シンプルな使用例
解説:
-
範囲A1:A10から「りんご」を検索
-
見つかればそのセルのアドレスを表示
-
なければ「見つからなかった」と表示
4. 見つかったセルに対する処理例
Sub ReplaceValue()
Dim c As Range
Set c = Range(“B1:B20”).Find(“バナナ”)
If Not c Is Nothing Then
c.Value = “アップル” ‘ 値を変更
End If
End Sub
5. 複数該当セルをすべて検索する方法(FindNext)
Sub FindAllExample()
Dim firstAddress As String
Dim c As Range
Dim ws As Worksheet
Set ws = ActiveSheet
With ws.Range(“A1:A100”)
Set c = .Find(“東京”, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Debug.Print c.Address, c.Value
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Sub
FindNextで検索をループさせるのがポイント!
6. よくあるエラー・注意点
ミス例・症状 | 原因 | 解決方法 |
---|---|---|
Object variable or With block variable not set |
検索結果がNothingなのに使用した | If Not r Is Nothing Then で判定を入れる |
FindNext が無限ループする |
firstAddress を比較していない |
最初のセルのアドレスを覚えておく |
大文字・小文字が一致しない | MatchCase:=True を忘れている |
明示的に区別させる |
数値が見つからない | LookIn:=xlValues にすべき |
LookIn の指定を明確に |
7. まとめ
機能 | 内容 |
---|---|
基本構文 | Range.Find(What:=検索値, ...) |
単一検索 | 見つかったセルのAddress やValue が使える |
全件検索 | Find → FindNext を Do While でループ |
注意点 | Nothing チェックと firstAddress の比較が重要 |
主な用途 | キーワード検索、値の置換、条件一致セルの取得など |
✅ 実務での活用例
-
商品名「リンゴ」の在庫セルを探して数量を変更
-
「未処理」と書かれたセルをすべてハイライト
-
指定の社員IDを見つけて、行全体を抽出表示
FindメソッドはVBAの検索処理で非常に重要な基本技術です。
応用すれば、複数条件検索、動的範囲指定、自動化にも活用できます。