VBAで検索の開始位置を指定する方法についてご説明します。
通常findではシートの始め(A1セル)から検索を開始しますが、引数Afterで開始位置を指定することもできます。
それでは、実際のコードの書き方について確認していきましょう。

引数afterを使用した検索位置の指定

<コード>
Cells.Find(after:=Range(“A7″), what:=”国語”).Select
‘A7セルの次のセルを始点として『国語』という語を検索’
<実行例>

例では1年生のセルを飛ばして2年生のセルから“国語”を検索しています。
ちなみにAfterで指定したセルの次のセルから検索を開始している点に注意しましょう。

引数Afterにセルを設定する場合の注意点

Afterには必ずセル1つを指定します。『After:=ActiveCell』とすると選択中のセルが指定されます。
また、Rangeで任意のセルを指定することもできます。そしてRangeでは次の様に複数のセルを指定することができるのですが、
Afterで使用する場合は1つのセルにしないと実行時エラーが発生します。
<コード>
Cells.Find(After:=Range(“A1:C3″), What:=”国語”).Select
‘A1からC3までの複数のセルを指定’
<エラー例>

Afterの検索の仕組み

次のコードを実行すると、3年生のセルから“算数”を選択したにもかかわらず1年生のセルが選択されてしまいます。
これはAfterで指定したセルの次のセルから検索を開始し、シートの終端まで検索語がヒットしなかった場合は
シートの最初に戻ってセルまで検索するという仕組みによるものです。
<コード>
Cells.Find(After:=Range(“A8″), What:=”算数”).Select
<実行例>

おわりに

Afterで検索の開始位置を指定すると、不要な検索をカットして効率的に検索を行うことができます。
シート全体の構成を確認し、適切にAfterを設定するようにしましょう。