まりふのひと

Excel2003で「FindNext」に挑戦

自治会の初の大行事、「住吉神社春の大祭」、色々てこずったが今日で終わる。
反省は、今夜行うとして、明日から一週間で「Excelでカレンダー」(これはフォルダの名前)のカスタマイズ「VLookup を FindNext に変える」に着手。
FindNext ‥‥ これは使ったことがない。手始めに、ヘルプに「使用例」が載っていないかを調べた。

FindNext メソッド
 関連項目対象使用例アプリケーション情報Find メソッドによって開始された検索を継続します。前回の検索条件に一致するセルを、下方向 (行のときは左から右、列のときは上から下) に検索し、見つかったセル (Range オブジェクト) を返します。選択範囲やアクティブ セルには影響はありません。
expression.FindNext(After)

  • expression: 必ず指定します。Range オブジェクトを返すオブジェクト式を指定します。
  • After: 省略可能です。バリアント型 (Variant) の値を使用します。指定したセルの下方 (行のときは右、列のときは下) のセルから検索を開始します。ワークシート上で検索を行う場合のアクティブ セルに相当します。引数 After には、対象セル範囲内の単一セルを指定する必要があります。検索は指定したセルの次のセルから始まるので、指定したセル自体は、範囲全体が一度検索されるまで検索されません。この引数を省略すると、セル範囲の左上端のセルが指定されたものとみなされます。

解説
 検索は指定された範囲の最後に達すると、範囲の最初に戻って検索を繰り返します。同じ範囲を繰り返して検索しないようにするには、最初に検索内容が見つかったセルの位置を保存しておき、次のセルが見つかるたびに、そのセルの位置と保存しておいたセルの位置を比較するようにします。
使用例
 次の使用例は、セル範囲 A1:A500 で、値に 2 が含まれているセルを検索し、その値を 5 に変更します。

With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, lookin:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With


早速、Excelにコピペ、適当なサンプルを作って実行!

エッ? 何故?