2018年7月6日セルセルの検索を同じ条件で続けて検索するセルの検索はFindメソッドで行います。その同じ検索条件で次の検索を行う場合はFindNextメソッド、前の検索を行う場合はFindPreviousメソッドを使います。よって、FindNextメソッドとFindPreviousメソッドは事前にFindメソッドを実行しておく必要があります。Findメソッドには9個の引数がありますが、FindNextメソッドとFindPreviousメソッドはそれらの引数を内部的に引き継いでいるため引数を省略して実行できます。検索を開始する単一セルのみを引数に指定することが可能です。親オブジェクトで指定した検索範囲内に含まれている単一セルを指定します。ここで指定したセルは検索対象にならず、次のセルから検索が行われます。それらの検索が終わったあとにここで指定したセルが検索されます。省略した場合は親オブジェクトで指定した検索範囲の中で一番左上にあるセルになります。親オブジェクトのRangeのセル範囲にここで指定したセルが含まれていない場合はエラーになります。検索条件に一致するセルが見つかった場合はそのセルのRangeオブジェクトを返します。見つからなかった場合はNothingを返します。戻り値のNothing判定処理FindNext、FindPreviousメソッドより先に実行するFindメソッドを使う場合、検索に一致するセルが見つからないと戻り値にNothingを返します。そのため、Findメソッドの戻り値がNothingかどうかの判定が必須になります。FindNext、FindPreviousメソッドの場合はどうかというと、やはりNothingの判定は入れておいた方が無難です。正確に言えば、FindメソッドでNothingでないのであればFindNextとFindPreviousメソッドでNothingになることはないのですが、レアケースで以下のような条件の場合はNothingになります。検索に一致するセルが1つしかなく、かつ、そのセルが縦に結合されている場合このような場合が無いとは限らないため、Findメソッドと同様にNothingの判定は入れておきましょう。検索の無限ループを防ぐにはFindメソッド、FindNextメソッド、FindPreviousメソッドのいずれも、検索範囲の最後まで検索すると、また検索範囲の開始セルから検索を行います。そのため同じセルが何度も検索されることになります。これを防ぐには最初のFindメソッドで見つかったセルを保持しておき、このセルが再度検索されたかどうかを判定して検索の無限ループを回避します。引数Afterの省略と設定の基準Find、FindNext、FindPreviousの各メソッドのいずれにも、検索の基準となる単一セルを引数Afterで指定します。引数Afterは省略した方がいい場合とそうでない場合があります。具体的には、Findメソッドの引数Afterは省略して、FindNextとFindPreviousメソッドは省略しない方がコーディングは楽になります。Findメソッドの場合は親オブジェクトのRangeオブジェクトで指定する検索範囲の中に引数Afterがない場合にFindメソッドがエラーになります。省略した場合は検索範囲の中で一番左上のセルが開始位置になります。その省略時の仕様に従った方がコーディングはしやすくなります。FindNextとFindPreviousメソッドで引数Afterを省略すると事前のFindメソッドで検索したセルが引き継がれないことになります。以下のサンプルコードでもFindメソッドのAfterは省略し、FindNextとFindPreviousメソッドは省略せずにコーディングしています。FindNextのサンプルコードまずFindメソッドを実行して、あとは同じ検索条件でFindNextメソッドを行うサンプルです。Sub実行結果FindメソッドはA1セルが基点となり、次のセルはB2セルが検索一致になります。$B$2$B$3$D$3$C$4$A$5$A$1FindPreviousのサンプルコードまずFindメソッドを実行して、あとは同じ検索条件でFindPreviousメソッドを行うサンプルです。Sub実行結果FindメソッドはA1セルが基点となり、前のセルはA5セルが検索一致になります。Excel作業をVBAで効率化シェアお問合わせTOPへ。