Excelでデータを扱う際に「特定の文字列を含むセルを探したい」というニーズは頻繁にあります。たとえば商品名リストの中から「りんご」を含むものを探したい場合、完全一致では「りんご」しかヒットしませんが、部分一致なら「青りんご」「りんごジュース」なども対象になります。
手作業でフィルターを使えば可能ですが、業務で繰り返し行うならVBAで自動化するのが効率的です。その際に便利なのが、Findメソッドを使った 部分一致検索(LookAt:=xlPart) です。
この記事では「vba find 部分一致」をテーマに、基本構文から複数セルの検索、注意点、実務で役立つ応用サンプルまで詳しく解説します。
目次
- ✅ VBAでFindを使った部分一致検索の基本
- ・Findメソッドの基本構文
- ✅ 完全一致との違い
- ・完全一致(xlWhole)
- ・部分一致(xlPart)
- ✅ 複数セルを部分一致で取得する方法
- ・FindNextを利用する
- ✅ 部分一致検索でよくある「見つからない」問題と対策
- ・余分なスペース
- ・大文字小文字の区別
- ・検索範囲の指定ミス
- ・数値と文字列の違い
- ✅ 部分一致検索の応用サンプル
- ・一致セルを色付けする
- ・一致セルの行をコピー
- ・一致件数をカウント
- ✅ 部分一致検索と他の方法の比較
- ・Findメソッド
- ・InStr関数
- ・ループ+If
- ✅ 部分一致検索を安定させるコツ
- ■ まとめ:Findで部分一致検索を自在に使いこなそう
✅ VBAでFindを使った部分一致検索の基本
・Findメソッドの基本構文
ExcelVBAのFindメソッドは、セル範囲の中から検索値を探すために使用します。部分一致検索をする場合は、LookAt:=xlPartを指定するのがポイントです。
Sub FindPartialMatch()
Dim rng As Range
Set rng = Range("A1:A100").Find(What:="りんご", LookAt:=xlPart)
If Not rng Is Nothing Then
MsgBox "ヒットしたセル:" & rng.Address & " 値=" & rng.Value
Else
MsgBox "該当データはありません"
End If
End Sub
手順
- 検索対象の範囲を指定(例:
A1:A100)。 FindのWhat引数に検索文字列を指定。LookAt:=xlPartを設定することで部分一致を実行。- 戻り値が
Nothingかどうかを判定し、セルのアドレスや値を取得。参考:【VBA】Findメソッド:基本構文と使用例
✅ 完全一致との違い
・完全一致(xlWhole)
セル全体の内容が検索値と一致する場合のみ対象。
Set rng = Range("A1:A100").Find("りんご", LookAt:=xlWhole)
→ 「りんご」はヒットするが、「りんごジュース」は対象外。
・部分一致(xlPart)
セルの一部に検索値が含まれていれば対象。
Set rng = Range("A1:A100").Find("りんご", LookAt:=xlPart)
→ 「りんご」「りんごジュース」「青りんご」すべてヒット。
実務では商品名やコメント欄などに対して部分一致を使うケースが多いです。
✅ 複数セルを部分一致で取得する方法
・FindNextを利用する
Findは最初の一致セルしか返さないため、複数セルを取得する場合はFindNextと組み合わせます。
Sub FindAllPartialMatches()
Dim rng As Range
Dim firstAddress As String
With Range("A1:A100")
Set rng = .Find("りんご", LookAt:=xlPart)
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
Debug.Print "一致セル:" & rng.Address & " 値=" & rng.Value
Set rng = .FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If
End With
End Sub
実務での活用例
- 顧客名リストから「株式会社」を含むデータを抽出。
- 商品名に「限定版」を含む行を一覧化。
- コメント欄に「確認要」と書かれているセルを探す。
✅ 部分一致検索でよくある「見つからない」問題と対策
・余分なスペース
セルに「りんご 」のように末尾にスペースがあるとヒットしない場合があります。
→ Trim関数で前後の空白を削除してから検索。
参考:【VBA】スペースを一括で削除【Replace関数:Trim関数】
・大文字小文字の区別
既定では区別しませんが、MatchCase:=Trueを指定すると区別されます。
→ 区別不要なら省略。
参考:【VBA】大文字と小文字を区別しない:LCase・UCase
・検索範囲の指定ミス
範囲外を指定していると当然ヒットしません。
→ 必要に応じて列全体(Range("A:A"))やUsedRangeを使う。
・数値と文字列の違い
「100」と入力されていても、文字列型と数値型の違いで見つからないことがあります。
→ 検索値をCStrで文字列に変換すると改善します。
✅ 部分一致検索の応用サンプル
・一致セルを色付けする
Sub HighlightPartialMatches()
Dim rng As Range, firstAddress As String
With Range("A1:A100")
Set rng = .Find("りんご", LookAt:=xlPart)
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
rng.Interior.Color = vbYellow
Set rng = .FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If
End With
End Sub
・一致セルの行をコピー
Sub CopyPartialMatchRows()
Dim rng As Range, wsOut As Worksheet
Dim firstAddress As String, r As Long
Set wsOut = Sheets("抽出結果")
r = 1
With Range("A1:A100")
Set rng = .Find("限定", LookAt:=xlPart)
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
rng.EntireRow.Copy wsOut.Rows(r)
r = r + 1
Set rng = .FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If
End With
End Sub
・一致件数をカウント
Sub CountPartialMatches()
Dim rng As Range, firstAddress As String
Dim cnt As Long
cnt = 0
With Range("A1:A100")
Set rng = .Find("確認", LookAt:=xlPart)
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
cnt = cnt + 1
Set rng = .FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If
End With
MsgBox "一致件数:" & cnt
End Sub
参考:【VBA】Findを使って列を指定して検索する方法|列内検索の基本と応用✅ 部分一致検索と他の方法の比較
・Findメソッド
- 高速処理が可能。
- セル単位で検索できる。
- 複数セル検索は
FindNextが必須。
・InStr関数
- セル内の位置を返すことが可能。
- 部分一致判定がシンプルに書ける。
- 処理はやや遅め。
・ループ+If
- 柔軟に条件を組み合わせ可能。
- 条件分岐が複雑な場合に有効。
- 大量データでは遅くなる。
実務では 基本はFind、必要に応じてInStrやループを併用 するのがおすすめです。
✅ 部分一致検索を安定させるコツ
- Nothing判定を必ず入れる
一致がない場合の処理を明確にする。 - 検索条件を明示的に指定する
LookAtやMatchCaseを省略すると前回の設定が残るため、常に明示。 - データ前処理を行う
スペースや全角半角の違いを整えておくと、意図せぬ検索漏れを防げます。 - 必要に応じて正規表現を利用する
高度な部分一致検索をする場合はVBAの正規表現を活用するのも有効です。
■ まとめ:Findで部分一致検索を自在に使いこなそう
FindにLookAt:=xlPartを指定すれば部分一致検索が可能。- 複数セルを探すには
FindNextを利用する。 - 実務では「色付け」「コピー」「件数カウント」と組み合わせて効率化できる。
- スペースや型の違いによる「見つからない」問題に注意する。
- InStrや正規表現との併用でさらに柔軟な検索が可能。
ExcelVBAで部分一致検索をマスターすれば、大量のデータから目的の情報を正確に抽出でき、日常業務のスピードと精度が大幅に向上します。ぜひ本記事のサンプルを参考に、業務効率化に役立ててみてください。