Excel VBAで「文字列を検索する」処理は、業務自動化に欠かせない基本テクニックです。大量のデータから特定の文字を探したり、条件に合うセルを抽出したり、複数箇所を順番に処理したりする場面は、日常業務で非常に多く発生します。
しかし、VBAの検索機能「Findメソッド」は、慣れないと動作が読みにくく、「見つからない」「ループが終わらない」「部分一致になってしまう」など、トラブルが発生しやすい構造になっています。
本記事では、Findメソッドの基本構文から、部分一致・完全一致の使い分け、複数結果の取得方法、検索が失敗する理由、実務での注意点まで、分かりやすく丁寧に解説します。
背景・理由・応用パターンを含め、初心者から中級者まで役立つ内容に仕上げています。
目次
- ✅ VBAで文字列を検索する方法は「Findメソッド」が中心
- ・Findメソッドとは
- ・Findの特徴
- ✅ Findメソッドの基本構文と各引数の意味
- ・Findメソッドの構文
- ・主要引数の解説
- ・部分一致と完全一致の違い
- ✅ 実務で使うFindの基本例(最初の1件だけ取得)
- ・最初に見つかったセルを取得する方法
- ✅ 複数の検索結果をループで取得する方法(実務必須)
- ・複数検索の完全版コード
- ✅ Findが動かない・見つからない理由と対処法
- ● ① LookIn が原因
- ● ② LookAt が原因
- ● ③ セルに全角・半角違いがある
- ● ④ 前回のFindの設定が残っている
- ✅ 特定列だけでなく「シート全体」を検索する方法
- ✅ 大量データで高速検索したいときのポイント
- ✅ 部分一致・前方一致・後方一致の実務的な使い分け
- ・部分一致
- ・前方一致(Like または Left関数などで再現)
- ・後方一致(Right関数で再現)
- ✅ 検索結果をリスト化する(実務で最も便利)
- ✅ RPA(UiPath)とFindメソッドの相性
- ✅ まとめ:Findメソッドを使いこなすと業務効率が大幅に上がる
✅ VBAで文字列を検索する方法は「Findメソッド」が中心
・Findメソッドとは
Findメソッドは、指定した文字列に一致するセルを検索し、見つかったセル(Rangeオブジェクト)を返す機能です。
最もよく使われる基本構文は次のとおりです。
Set c = Range("A:A").Find(What:="検索文字", LookAt:=xlPart)
・Findの特徴
- 検索条件が柔軟(部分一致・完全一致)
- 見つかったセルをオブジェクトとして取得できる
- 一発検索だけでなく複数ヒットにも対応
- LookAt・LookIn など細かい設定が可能
“文字列を検索する” という操作をする場合、
最優先で使うべきVBAの機能 です。
✅ Findメソッドの基本構文と各引数の意味
・Findメソッドの構文
Range.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase)
・主要引数の解説
| 引数 | 意味 | よく使う設定 |
|---|---|---|
| What | 検索する文字列 | "田中" |
| LookAt | 一致条件 | xlPart(部分一致)、xlWhole(完全一致) |
| LookIn | 検索対象 | xlValues(値)、xlFormulas(数式) |
| MatchCase | 大文字・小文字の区別 | True / False |
・部分一致と完全一致の違い
部分一致:
LookAt:=xlPart
完全一致:
LookAt:=xlWhole
「田中」を含むセルをすべて探したい場合は部分一致が適しています。
✅ 実務で使うFindの基本例(最初の1件だけ取得)
・最初に見つかったセルを取得する方法
Dim c As Range
Set c = Range("A:A").Find("東京")
If Not c Is Nothing Then
MsgBox "見つかった場所:" & c.Address
Else
MsgBox "見つかりませんでした"
End If
・ポイント
- 見つからなかった場合は Nothing が返る
- 見つかった場合はそのセルのアドレスが取得できる
後続処理への応用がしやすい書き方です。
参考:【VBA】条件に一致するセルを複数取得する方法|Find・For Each・SpecialCells
✅ 複数の検索結果をループで取得する方法(実務必須)
Findは1件目だけでなく、複数の一致を順番に取得できます。
・複数検索の完全版コード
Dim c As Range
Dim firstAddress As String
Set c = Range("A:A").Find(What:="東京", LookAt:=xlPart)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Debug.Print c.Address & " にヒットしました"
Set c = Range("A:A").FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
・ポイント
- 最初のセルのアドレスを記録する
- FindNext で次の一致を取得
- 同じセルに戻ったら終了
これは 実務でもっとも使われるFindのパターン です。
参考:【VBA】Findを使って複数条件で検索する方法|実務で役立つ応用サンプル
✅ Findが動かない・見つからない理由と対処法
Findは柔軟だがゆえに、次のようなトラブルが起こりがちです。
● ① LookIn が原因
- 他のマクロの影響で設定が変わる
- 数式内に検索文字があるのか、表示値にあるのかで結果が変わる
例:
LookIn:=xlValues '値を見る
LookIn:=xlFormulas '数式を見る
● ② LookAt が原因
部分一致と完全一致を間違えると検索できません。
● ③ セルに全角・半角違いがある
"ABC" と "ABC" は別物です。
● ④ 前回のFindの設定が残っている
Find は“直前の検索条件”を保持するため、
毎回 LookAt / LookIn を明示するのが安全です。
✅ 特定列だけでなく「シート全体」を検索する方法
Dim c As Range
Set c = Cells.Find("合計")
Cells はシート全体を意味します。
ただし、不要に範囲が広いと検索速度が遅くなるため、
業務マクロでは 対象範囲を限定する のがおすすめです。
✅ 大量データで高速検索したいときのポイント
- Findの範囲を必要最小限にする
- ScreenUpdatingを切る
- Application.Calculationを手動にする
- LookIn / LookAt を明示する
- Afterの設定で次のセルから検索させる
単純なコードでも、これらの対策で速度が大きく変わります。
✅ 部分一致・前方一致・後方一致の実務的な使い分け
・部分一致
あいまい検索に向く
例:含む、含まない判定
・前方一致(Like または Left関数などで再現)
例:「ABC123」の “ABC” を探す
・後方一致(Right関数で再現)
例:顧客コードの末尾が一致するか探す
Findだけでなく、Like と組み合わせると柔軟な検索が可能になります。
参考:【VBA】Excelシート全体の置換を自動化する方法|部分一致・完全一致まで徹底解説
✅ 検索結果をリスト化する(実務で最も便利)
複数の検索結果をまとめて別シートに出力することもできます。
Dim c As Range, firstAddress As String
Dim r As Long: r = 1
Set c = Range("A:A").Find("東京", LookAt:=xlPart)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Sheets("検索結果").Cells(r, 1).Value = c.Value
r = r + 1
Set c = Range("A:A").FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
実務では
「検索結果一覧を作りたい」
という需要が多く、この形は非常に重宝します。
✅ RPA(UiPath)とFindメソッドの相性
UiPathを使ってExcelを扱う場合、
Findメソッドを含むVBAを先に実行して「検索結果セル」を返すことで、
RPAの処理を安定化させることができます。
- RPAは大量データの検索が苦手
- セルを1件ずつ探すと動作が遅い
- LookAt / LookIn の柔軟性が低い
そのため現場では
✔ “検索だけVBAで実施し、結果をRPAに渡す”
というハイブリッド運用がよく採用されます。
✅ まとめ:Findメソッドを使いこなすと業務効率が大幅に上がる
- FindメソッドはVBAで文字列検索する中心的な手法
- 部分一致/完全一致を明示することが重要
- LookIn/LookAt を指定しないと結果が安定しない
- 複数一致は FindNext とループで処理
- Findが見つからない原因は設定ミスが多い
- 大量データは範囲を絞ると高速化できる
- 検索結果の一覧化で実務効率が大きく向上
- RPAと組み合わせると業務自動化で強力な武器になる
Findメソッドは“使いこなすほど価値が上がるVBAの基本技能”です。
ぜひ本記事を参考に、文字列検索の精度と業務効率を高めてみてください。