エクセルマクロで特定の値を検索するには、Find
メソッドを使うのが一般的ですが、複数の一致するセルを順番に検索したい場合は、FindNext
メソッドが便利です。
FindNextとは?
FindNext
は、Range.Find
で見つけたセルの次の一致セルを検索するメソッドです。- ループを使ってシート内のすべての一致セルを順番に取得する場合に役立ちます。
FindNext
の基本
Find
で最初の一致セルを見つけるFindNext
で次の一致セルを取得する- 一致セルが最初のセルに戻るまで繰り返す
サンプルコード
以下は、シート内で「検索する値」に一致するすべてのセルを検索し、それらのアドレスをメッセージボックスに表示する例です。
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
- 最初に見つかったセルのアドレスを記録し、次に戻ってきたらループを終了します。
使用上の注意点
- 無限ループを防ぐための条件: 検索が最初のセルに戻ったかどうかを確認する条件を必ず追加してください。これを怠ると、無限ループに陥る可能性があります。
- Find の設定を統一する:
Find
の引数(例:LookIn
,LookAt
など)は、FindNext
でも保持されます。同じ条件で検索を続ける場合は、設定を揃えましょう。 - 検索方向:
FindNext
はデフォルトで列方向に進みます。行方向に進む場合は、SearchOrder
をxlByRows
に設定します。
まとめ
FindNext
メソッドを使えば、Excel VBAで複数のセルを簡単に検索できます。Find
と組み合わせることで、検索結果を効率的に処理することが可能です。この機能を使って、より柔軟で効率的なマクロを作成してみてください。
エクセルマクロに関する他の質問やリクエストがあれば、ぜひコメントでお知らせください!