MENU

【VBA】FindNextメソッドの使い方と活用例を徹底解説!

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

この記事では、FindNextの基本構文から実践的なサンプルコード、よくあるミスとその対策まで、初心者にもわかりやすく解説します。

目次

FindNextとは?

FindNextは、Range.Findで見つかった最初のセル以外の一致セルを順番に検索するために使うメソッドです。ループと組み合わせて使うことで、目的の値が複数存在する場合に、すべてを効率的に処理できます。

FindNextの基本構文

Sub FindAllMatchingCells()
    Dim rng As Range
    Dim firstAddress As String

    Set rng = Cells.Find("検索したい文字列")
    
    If Not rng Is Nothing Then
        firstAddress = rng.Address
        Do
            ' 該当セルに対しての処理をここに記述(例:セルの色を変更など)
            Debug.Print rng.Address  ' デバッグ出力の例

            Set rng = Cells.FindNext(rng)
        Loop While Not rng Is Nothing And rng.Address <> firstAddress
    End If
End Sub

この構文では、最初の一致セルのアドレスを記録しておき、再度そのセルに戻ったらループを終了します。

これにより、無限ループを防止できます。

FindNextの使用例

Sub HighlightTokyo()
    Dim rng As Range
    Dim firstAddress As String

    Set rng = Cells.Find(What:="東京")

    If Not rng Is Nothing Then
        firstAddress = rng.Address
        Do
            rng.Interior.Color = RGB(255, 255, 0) ' 黄色でハイライト
            Set rng = Cells.FindNext(rng)
        Loop While Not rng Is Nothing And rng.Address <> firstAddress
    End If
End Sub

この使用例コードでは、「東京」という文字列を全て検索し、該当セルを黄色にハイライトしています。これにより、目視での確認作業が格段にしやすくなります。

応用例:一致するすべてのセルの隣の値を合計する

Sub SumAdjacentValues()
    Dim rng As Range
    Dim firstAddress As String
    Dim total As Long

    Set rng = Cells.Find(What:="商品A", LookAt:=xlWhole)
    If Not rng Is Nothing Then
        firstAddress = rng.Address
        Do
            total = total + rng.Offset(0, 1).Value
            Set rng = Cells.FindNext(rng)
        Loop While Not rng Is Nothing And rng.Address <> firstAddress
    End If

    MsgBox "商品Aの合計売上:" & total & "千円"
End Sub

この例では、「商品A」と記載されたセルの右隣にある数値(売上)を合計しています。実務では、商品の集計や部署ごとの計算など、様々な場面で活用できます。

よくあるミスと注意点

よくあるミス解説
firstAddressを保存していない無限ループの原因になります。最初の一致セルに戻ったかを確認しないと、永遠にループが回り続けます。
FindFindNextの範囲が異なる別の範囲を指定すると正しくループできません。必ず同じ範囲を使うようにしましょう。
LookInLookAtの設定を忘れている一致条件が厳しすぎたり曖昧すぎたりして、検索結果が得られない可能性があります。

FindNextは、最初に使用したFindメソッドの検索条件を引き継いで動作します。そのため、LookIn(値・数式)やLookAt(完全一致・部分一致)を意識して設定しましょう。

まとめ

  • FindNextは、Findと併用して複数の一致セルを順に処理するために使います。
  • firstAddressの保存、同一範囲の使用、検索条件の設定が重要なポイントです。
  • ハイライト処理、合計処理など、業務効率化に直結する便利な機能なので、ぜひ使いこなしましょう。

この記事を書いた人

めんどくさがりでズボラ。
某自動車メーカーで、VBAやRPAを用いた業務効率化を行っております。

目次