検索を繰り返す

検索を繰り返すメソッドです。

Range.FindNext メソッド

(以下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

結果
結果の図


Range.FindPrevious メソッド

FindNextとは検索方向が異なります

(以下Helpより)-----

Find メソッドによって開始された検索を継続します。前回の検索条件に一致するセルを、上方向(行のときは右から左、列のときは下から上)に検索し、見つかったセル(Range オブジェクト)を返します。選択範囲やアクティブ セルには影響はありません。
-----(以上Helpより)

構文

構文
(以下Helpより)-----

式.FindPrevious(After)

式 Range オブジェクトを表す変数


--以下略--

-----(以上Helpより)

Excel VBAのチップス一覧へ戻る

ツイート
このエントリーをはてなブックマークに追加
inserted by FC2 system