セルの値の検索を連続で実行(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
コードの詳細な説明
- サブルーチンの宣言:
Private Sub Range_Find_FindNext()
- このサブルーチンは、指定したセル範囲内で特定の値を連続して検索し、見つかった全ての値を処理します。
- セル範囲の特定:
With Sheet1.Range("B2").CurrentRegion
- セル
B2
を基準にして、そのセルが含まれる連続したセル範囲(CurrentRegion)を取得します。
- セル
- 検索の設定と実行:
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バイト文字を含む場合に使用)。
- 検索結果の処理:
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
メソッドを使用して次の検索結果を取得します。- 最初の検索結果に戻ってくるまで検索を繰り返します。
実行の流れ
- セル範囲の取得:
- セル
B2
を基準とする連続したセル範囲を取得します。
- セル
- 検索の実行:
Find
メソッドを使用して、値が “10” であるセルを検索します。
- 検索結果の処理:
- 検索結果が見つかった場合、そのセルの値をデバッグウィンドウに出力します。
FindNext
メソッドを使用して次の検索結果を取得し、全ての検索結果を順番に処理します。
使用例
例えば、セル範囲に以下のデータがあるとします:
このコードを実行すると、値が “10” であるセルを順番に見つけて、その値をデバッグウィンドウに出力します。結果として、デバッグウィンドウには以下のように表示されます:
このコードは、特定の値をセル範囲内で効率的に検索し、全ての検索結果を処理するために非常に有用です。