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の設定によっては思い通りの順番に並ばないかもしれません。
その癖に注意しながらプログラムを組む必要があります。
コメント