【Excel VBA】FindNextで検索する方法!複数条件の他部分一致も!

【Excel VBA】FindNextで検索する方法!複数条件の他部分一致も!

Excel VBA を使ってセル内のデータを検索したいことはありませんか?

けど、そんな中で悩むことは、

  • Find メソッドで最初の一致だけではなく、すべての一致を取得したい
  • 複数の条件で検索をしたい
  • 部分一致やワイルドカードを使った検索をしたい

ですよね。

今回はそんなお悩みを解決する

  • FindNext を使った繰り返し検索の方法
  • 複数条件での検索
  • 部分一致・ワイルドカードを使った検索

についてまとめます!

FindNextを使った検索の完成イメージ

VBA の Find メソッドは、シート内の特定の値を検索するのに便利ですが、最初に見つかった値しか取得しません。

FindNext を使うことで、検索条件に一致するすべてのセルをループ処理で取得できます。

例えば、

POINT
  • 指定したキーワードを含むすべてのセルを検索
  • 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 メソッドの LookAtxlPart を指定すると、部分一致検索が可能です。

例:”みかん” を含むすべてのセルを検索

Set rng = Worksheets("Sheet1").Cells.Find(What:="みかん", LookAt:=xlPart)

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

タカヒロ
タカヒロ
ワイルドカードを使う場合はLookAt:=xlWholeの完全一致版にもどしてください。

例:”みかん” が前方一致するセルを検索

Set rng = Worksheets("Sheet1").Cells.Find(What:="みかん*", LookAt:=xlWhole)

例:2文字目が”ず”のセルを検索

Set rng = Worksheets("Sheet1").Cells.Find(What:="?ず*", LookAt:=xlWhole)

さいごに

いかがでしょうか。

今回は、

  • FindNext を使った繰り返し検索
  • OR条件で複数キーワード検索
  • 部分一致やワイルドカード検索

についてまとめました。

FindNext を活用することで、シート内の検索作業を自動化し、データ処理を効率化できます。ぜひ試してみてください!



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。







コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA ImageChange Image