Excel VBA を使ってセル内のデータを検索したいことはありませんか?
けど、そんな中で悩むことは、
Find
メソッドで最初の一致だけではなく、すべての一致を取得したい- 複数の条件で検索をしたい
- 部分一致やワイルドカードを使った検索をしたい
ですよね。
今回はそんなお悩みを解決する
FindNext
を使った繰り返し検索の方法- 複数条件での検索
- 部分一致・ワイルドカードを使った検索
についてまとめます!
もくじ
FindNextを使った検索の完成イメージ
VBA の Find
メソッドは、シート内の特定の値を検索するのに便利ですが、最初に見つかった値しか取得しません。
FindNext
を使うことで、検索条件に一致するすべてのセルをループ処理で取得できます。
例えば、
- 指定したキーワードを含むすべてのセルを検索
- 2つの異なるキーワードで検索
- 「○○」を含むセルを検索し、背景色を変更
FindNext を使った検索の基本
基本的なFindNextの使い方
コード
Option Explicit
Sub 基本的なFindNext()
Dim rng As Range, firstAddress As String
Set rng = Worksheets("Sheet1").Cells.Find(What:="<検索文字列>", LookAt:=xlWhole)
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
' 検索したセルの処理(例:背景色を黄色に変更)
rng.Interior.Color = RGB(255, 255, 0)
' 次の検索結果を取得
Set rng = Worksheets("Sheet1").Cells.FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If
End Sub
解説
Find
で最初の一致を検索FindNext
を使って次の一致を取得しながらループfirstAddress
を保存し、最初に戻ったら終了LookAt:=xlWhole
は完全一致を意味する。部分一致にしたい場合xlPartにする
この方法で、シート内のすべての一致するセルを検索し、処理できます。
さっそく試してみましょう。
「みかん」を含むセルの背景を黄色にします。
Option Explicit
Sub 基本的なFindNext()
Dim rng As Range, firstAddress As String
Set rng = Worksheets("Sheet1").Cells.Find(What:="みかん", LookAt:=xlWhole)
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
' 検索したセルの処理(例:色を変更)
rng.Interior.Color = RGB(255, 255, 0)
' 次の検索結果を取得
Set rng = Worksheets("Sheet1").Cells.FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If
End Sub
みかんを含む文字列をセルに入力します。

VBAを実行すると、

はい、みかんが入力されているセルの背景色が黄色にかわりましたね!
複数の検索条件を使う(OR条件)
2つ以上のキーワード(例えば「ぶどう」と「ぽんかん」)で検索するには、2回 FindNext
を実行します。
Sub 複数の検索条件FindNext()
Dim rng As Range, firstAddress As String
Dim keywords As Variant, keyword As Variant
keywords = Array("ぶどう", "ぽんかん") ' 検索するキーワード
For Each keyword In keywords
Set rng = Worksheets("Sheet1").Cells.Find(What:=keyword, LookAt:=xlWhole)
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
' 検索したセルを強調表示
rng.Font.Bold = True
rng.Interior.Color = RGB(255, 255, 0)
' 次の検索結果を取得
Set rng = Worksheets("Sheet1").Cells.FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If
Next keyword
End Sub
解説
Array
で検索キーワードをリスト化For Each
でそれぞれのキーワードをFindNext
で検索
このコードを使うと、「ぶどう」か「ぽんかん」を含むすべてのセルを検索し、太字にできます。

はい、できましたね!
部分一致とワイルドカードを使った検索
Find
メソッドの LookAt
に xlPart
を指定すると、部分一致検索が可能です。
例:”みかん” を含むすべてのセルを検索
Set rng = Worksheets("Sheet1").Cells.Find(What:="みかん", LookAt:=xlPart)

また、ワイルドカード *
や ?
を使うと柔軟な検索ができます。

例:”みかん” が前方一致するセルを検索
Set rng = Worksheets("Sheet1").Cells.Find(What:="みかん*", LookAt:=xlWhole)

例:2文字目が”ず”のセルを検索
Set rng = Worksheets("Sheet1").Cells.Find(What:="?ず*", LookAt:=xlWhole)

さいごに
いかがでしょうか。
今回は、
FindNext
を使った繰り返し検索- OR条件で複数キーワード検索
- 部分一致やワイルドカード検索
についてまとめました。
FindNext
を活用することで、シート内の検索作業を自動化し、データ処理を効率化できます。ぜひ試してみてください!
コメントを残す