セルの値の検索を連続で実行(Find, FindNext)

以下のコードは、指定したセル範囲内で特定の値を検索し、見つかった全ての値を順番に処理する方法を示しています。具体的には、値が “10” であるセルを検索し、その値を出力します。

' セルの値の検索を連続で実行(Find, FindNext)
Private Sub Range_Find_FindNext()

    With Sheet1.Range("B2").CurrentRegion
        Dim rng As Range
        ' .Find メソッドを使用して検索を行う
        ' 値が “10” である部分一致を検索
        Set rng = .Find(What:="10", _
            after:=.Range("B2"), _
            LookIn:=xlValues, LookAt:=xlPart, _
            MatchCase:=False, Matchbyte:=True)
            
        If Not rng Is Nothing Then
            ' 最初の検索結果のアドレスを保存する
            Dim firstAddress As String
            firstAddress = rng.Address
            ' ループを使用して検索結果を順番に処理する
            Do
                ' 検索結果の値を出力する(デバッグ用)
                Debug.Print rng.Value
                ' 次の検索結果を取得する
                Set rng = .FindNext(rng)
            ' 最初の検索結果に戻ってくるまで検索が繰り返されます。
            Loop While rng.Address <> firstAddress
        End If
    End With
End Sub

コードの詳細な説明

  1. サブルーチンの宣言:Private Sub Range_Find_FindNext()
    • このサブルーチンは、指定したセル範囲内で特定の値を連続して検索し、見つかった全ての値を処理します。
  2. セル範囲の特定:With Sheet1.Range("B2").CurrentRegion
    • セル B2 を基準にして、そのセルが含まれる連続したセル範囲(CurrentRegion)を取得します。
  3. 検索の設定と実行:Set rng = .Find(What:="10", _ after:=.Range("B2"), _ LookIn:=xlValues, LookAt:=xlPart, _ MatchCase:=False, Matchbyte:=True)
    • .Find メソッドを使用して、値が “10” であるセルを検索します。
    • What:="10":
      • 検索する値は “10” です。
    • after:=.Range("B2"):
      • 検索を開始するセルの次のセルから検索を開始します。
    • LookIn:=xlValues:
      • 値を検索対象とします。
    • LookAt:=xlPart:
      • 部分一致で検索します。
    • MatchCase:=False:
      • 大文字と小文字を区別しません。
    • Matchbyte:=True:
      • バイト単位で検索します(日本語などの2バイト文字を含む場合に使用)。
  4. 検索結果の処理:If Not rng Is Nothing Then
    Dim firstAddress As String
    firstAddress = rng.Address
    Do
    Debug.Print rng.Value
    Set rng = .FindNext(rng)
    Loop While rng.Address <> firstAddress
    • 検索結果が見つかった場合、そのセル範囲の値を処理します。
    • 最初の検索結果のアドレスを保存し、Do...Loop で全ての検索結果を順番に処理します。
    • FindNext メソッドを使用して次の検索結果を取得します。
    • 最初の検索結果に戻ってくるまで検索を繰り返します。

実行の流れ

  1. セル範囲の取得:
    • セル B2 を基準とする連続したセル範囲を取得します。
  2. 検索の実行:
    • Find メソッドを使用して、値が “10” であるセルを検索します。
  3. 検索結果の処理:
    • 検索結果が見つかった場合、そのセルの値をデバッグウィンドウに出力します。
    • FindNext メソッドを使用して次の検索結果を取得し、全ての検索結果を順番に処理します。

使用例

例えば、セル範囲に以下のデータがあるとします:

このコードを実行すると、値が “10” であるセルを順番に見つけて、その値をデバッグウィンドウに出力します。結果として、デバッグウィンドウには以下のように表示されます:

このコードは、特定の値をセル範囲内で効率的に検索し、全ての検索結果を処理するために非常に有用です。

Follow me!