FindNextメソッド、FindPreviousメソッドは指定した範囲且つ、指定した条件のセルを全て抽出します。
条件に当てはまるセルを、最初の一つだけ抽出する場合はFindメソッドを使用します。
メソッド説明
FindNextメソッド、FindPreviousメソッドの構文は、それぞれ以下のように記載します。
'■FindNext
object.FindNext(After)
'■FindPrevious
object.FindNext(After)
引数の一覧は以下です。
| 引数 | 定数 | 説明 | 省略可否 |
| After | ー | 検索開始位置 | 可能 |
注意点
- FindNextメソッド、FindPreviousメソッド含め、単独で使用できずFindメソッドと併用します。
- Findメソッドは検索開始セルは一番左上のセルの2つ目からです。1つ目のセルは一番最後に検索します。
例)検索範囲がA1:A100ならA2から順番に検索し、A100まで検索し終えた後、A1を計算します。
詳細はこちら - 検索結果が0件の場合、「Nothing」が返る為、エラー回避処理は必須。
- Findメソッドを使用すると、エクセル検索ダイアログの設定が書き換えられます。
使い方サンプル
FindNextメソッドサンプル(あいまい検索)
商品名や顧客名などのあいまい検索をするケースが主な使い方です。
(カナ検索など文字を特定しきれないに使用します)
Dim rng As Range
Dim target As Range
Dim firstAddress As String
Dim msg As String
Set rng = Range("A1:A20")
Set target = rng.Find(what:="あいうえお", LookAt:=xlWhole, LookIn:=xlValues, MatchCase:=True, MatchByte:=True)
If target Is Nothing Then
MsgBox "指定した文字ではヒットしません"
Else
'■最初の一致したセルアドレスを覚えておく
firstAddress = target.Address
'■DoLoopで繰返し、条件を満たす全てのセルを抽出する
'■rng.Address = firstAddressとなれば最後まで検索したので抜ける
Do
msg = msg & target.Row & "行目" & target.Column "列目" & vbCrLf
Set target = rng.FindNext(target)
If target Is Nothing Then Exit Do
Loop Until target.Address = firstAddress
MsgBox msg
End If
FindPreviousメソッドサンプル(あいまい検索)
Dim rng As Range
Dim target As Range
Dim firstAddress As String
Dim msg As String
Set rng = Range("A1:A20")
Set target = rng.Find(what:="あいうえお", LookAt:=xlWhole, LookIn:=xlValues, MatchCase:=True, MatchByte:=True)
If target Is Nothing Then
MsgBox "指定した文字ではヒットしません"
Else
'■最初の一致したセルアドレスを覚えておく
firstAddress = target.Address
'■DoLoopで繰返し、条件を満たす全てのセルを抽出する
'■rng.Address = firstAddressとなれば最後まで検索したので抜ける
Do
msg = msg & target.Row & "行目" & target.Column & "列目" & vbCrLf
Set target = rng.FindPrevious(target)
If target Is Nothing Then Exit Do
Loop Until target.Address = firstAddress
MsgBox msg
End If
結果サンプル

Findメソッドの癖に注意
上記、FindNextとFindPreviousでコード記載の違いは、ほとんどありません。
「次に検索」もしくは「前に検索」の順番が違うだけです。
業務システムで上記処理をする場合はFindNextが多いです。(昇順でやりとりするため)
またFindの引数Afterの設定によっては思い通りの順番に並ばないかもしれません。
その癖に注意しながらプログラムを組む必要があります。



コメント