Excel VBAのチップスです。
検索を繰り返すメソッドです。
(以下Helpより)-----
Find メソッドによって開始された検索を継続します。前回の検索条件に一致するセルを、下方向 (行のときは左から右、列のときは上から下) に検索し、見つかったセル(Range オブジェクト)を返します。選択範囲やアクティブ セルには影響はありません。-----(以上Helpより)
構文
(以下Helpより)-----
式.FindNext(After)
式 Range オブジェクトを表す変数パラメーター
名前 必須/オプション データ型 説明 After オプション バリアント型 (Variant) 指定したセルの下方 (行のときは右、列のときは下) のセルから検索を開始します。ワークシート上で検索を行う場合のアクティブ セルに相当します。引数 After には、対象セル範囲内の単一セルを指定する必要があります。検索は指定したセルの次のセルから始まるので、指定したセル自体は、範囲全体が一度検索されるまで検索されません。この引数を省略すると、セル範囲の左上隅のセルが指定されたものと見なされます。
戻り値
Range備考
検索は指定された範囲の最後に達すると、範囲の最初に戻って検索を繰り返します。同じ範囲を繰り返して検索しないようにするには、最初に検索内容が見つかったセルの位置を保存しておき、次のセルが見つかるたびに、そのセルの位置と保存しておいたセルの位置を比較するようにします。
-----(以上Helpより)
例1
以下のような表で検索をしてみます。
Sub findnexttest()
Dim FindString As String
Dim FindRange As Range
Dim FindAddress As String
FindString = Application.InputBox("県名を入力してください")
If FindString = "false" Then
Exit Sub
End If
Set FindRange = Range("A4", "E9").Find(FindString) ’最初の検索
If FindRange Is Nothing Then
MsgBox "県名が見つかりません"
Else
’見つけたアドレスをFindAddressに代入
FindAddress = FindRange.Address
Do
MsgBox "氏名は" & FindRange.Offset(0, -1).Value & "です"
Set FindRange = Range("A4", "E9").findnext(FindRange) ’次の検索を実行
Loop Until FindRange.Address = FindAddress ’FindAddressになるまで
End If
Set FindRange = Nothing
End Sub
結果
例2
同じく上記のリストを使用したサンプルです。コードはHelpにあったものをちょっと変えたものです。
Sub findnexttest1()
Dim c As Range
Dim firstAddress As String
With Worksheets(1).Range("e4:e9")
Set c = .Find(2, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .findnext(c)
Loop Until c Is Nothing
’元の Loop While Not c Is Nothing And c.Address <> firstAddress
’ではerrorとなるので変更
End If
End With
Set c = Nothing
End Sub
結果
FindNextとは検索方向が異なります
(以下Helpより)-----
Find メソッドによって開始された検索を継続します。前回の検索条件に一致するセルを、上方向(行のときは右から左、列のときは下から上)に検索し、見つかったセル(Range オブジェクト)を返します。選択範囲やアクティブ セルには影響はありません。-----(以上Helpより)
構文
(以下Helpより)-----
式.FindPrevious(After)
式 Range オブジェクトを表す変数
--以下略--
-----(以上Helpより)