MENU

【VBA】FindNextの使い方を徹底解説!

エクセルマクロで特定の値を検索するには、Findメソッドを使うのが一般的ですが、複数の一致するセルを順番に検索したい場合は、FindNextメソッドが便利です。

FindNextとは?

  • FindNextは、Range.Findで見つけたセルの次の一致セルを検索するメソッドです。
  • ループを使ってシート内のすべての一致セルを順番に取得する場合に役立ちます。

FindNext の基本

  1. Findで最初の一致セルを見つける
  2. FindNextで次の一致セルを取得する
  3. 一致セルが最初のセルに戻るまで繰り返す

サンプルコード

以下は、シート内で「検索する値」に一致するすべてのセルを検索し、それらのアドレスをメッセージボックスに表示する例です。

Sub FindNextの使い方()
    Dim 検索範囲 As Range
    Dim 最初のセル As Range
    Dim 一致セル As Range
    Dim 検索値 As String

    ' 検索する値を指定
    検索値 = "検索する値"

    ' 検索範囲を設定(例: シート全体)
    Set 検索範囲 = ActiveSheet.UsedRange

    ' 最初の一致セルを検索
    Set 一致セル = 検索範囲.Find(What:=検索値, LookIn:=xlValues, LookAt:=xlPart)

    ' 一致セルが見つからない場合
    If 一致セル Is Nothing Then
        MsgBox "一致する値が見つかりませんでした。"
        Exit Sub
    End If

    ' 最初のセルを記録
    Set 最初のセル = 一致セル

    ' 一致セルをループで検索
    Do
        ' 一致したセルのアドレスを表示
        MsgBox "一致セル: " & 一致セル.Address

        ' 次の一致セルを検索
        Set 一致セル = 検索範囲.FindNext(一致セル)

        ' 最初のセルに戻ったら終了
    Loop While Not 一致セル Is Nothing And 一致セル.Address <> 最初のセル.Address
End Sub

コードの解説

Findで最初の一致セルを検索

Set 一致セル = 検索範囲.Find(What:=検索値, LookIn:=xlValues, LookAt:=xlPart)
  • What: 検索する値。例: “検索する値”
  • LookIn: 検索対象(値、数式、コメントなど)。ここでは値を指定。
  • LookAt: 部分一致(xlPart)または完全一致(xlWhole)を指定。

FindNextで次の一致セルを検索

Set 一致セル = 検索範囲.FindNext(一致セル)

Replace関数は、文字列中の特定の部分を別の文字列に置き換えるために使用します。以下はその基本的な構文です。

  • FindNextは、前回FindまたはFindNextで見つけたセルを起点に次の一致セルを検索します。

ループを使ってすべての一致セルを処理

Do
    ' 一致したセルの処理
    MsgBox "一致セル: " & 一致セル.Address

    ' 次の一致セルを検索
    Set 一致セル = 検索範囲.FindNext(一致セル)
Loop While Not 一致セル Is Nothing And 一致セル.Address <> 最初のセル.Address
  • 最初に見つかったセルのアドレスを記録し、次に戻ってきたらループを終了します。

使用上の注意点

  1. 無限ループを防ぐための条件: 検索が最初のセルに戻ったかどうかを確認する条件を必ず追加してください。これを怠ると、無限ループに陥る可能性があります。
  2. Find の設定を統一する: Find の引数(例: LookIn, LookAt など)は、FindNext でも保持されます。同じ条件で検索を続ける場合は、設定を揃えましょう。
  3. 検索方向: FindNext はデフォルトで列方向に進みます。行方向に進む場合は、SearchOrderxlByRows に設定します。

まとめ

FindNext メソッドを使えば、Excel VBAで複数のセルを簡単に検索できます。Find と組み合わせることで、検索結果を効率的に処理することが可能です。この機能を使って、より柔軟で効率的なマクロを作成してみてください。

エクセルマクロに関する他の質問やリクエストがあれば、ぜひコメントでお知らせください!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

自動車メーカーで、VBAやRPAを用いた業務効率化・業務改善を行っております。

目次