「excel vba find after 使い方」
「vba find after 書き方」
「vba find afterの指定方法」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが、時折あります。
Excel VBA(Visual Basic for Applications)の、Range.Findメソッドの引数・Afterの使い方を調べている方による検索です。
Range.Findメソッドの引数・Afterを確認するサンプルマクロ
RangeオブジェクトのFindメソッドの引数・Afterは、検索を開始する起点にしたいセルを指定します。Range.Findは、引数・Afterに指定されたセルの次のセルから検索を行います。
簡単なマクロを動かしてみるほうが理解しやすいでしょう。
アクティブなワークシートの、いくつかのセルに「a」という文字列を入力しておいて、以下のマクロを実行してみてください。Cells.Find(What:="a", After:=ActiveCell).Select
End Sub
実行するたびに、「a」と入力されているセルが、順番に選択されることを確認できるはずです。
Afterにはアクティブなセルを表すRangeオブジェクトを返すActiveCellプロパティが指定されていますから、アクティブなセルの次のセルから「a」を検索して、Selectメソッドで選択を行っています。
実行するたびに、アクティブなセルが変化するので、新たなアクティブセルの次のセルから検索が開始され、次に見つかったセルが選択されるわけです。
Afterには一つのセルを表すオブジェクト式を指定する
Afterには一つのセルを表すオブジェクト式を指定する必要があります。
ですから、例えば、
Cells.Find(What:="a", After:=Range("A1")).Select
あるいは、
Cells.Find(What:="a", After:=Cells(1, 1)).Select
といった指定はOKです。
ですが、
Cells.Find(What:="a", After:=Range("A1", "G7")).Select
とした場合は複数のセルを表すRangeオブジェクトを返すオブジェクト式(Range("A1", "G7"))がAfterに指定されているために、
「型が一致しません。」
という実行時エラーが表示されます。
範囲指定を行うのはAfterではない
アクセスログを眺めていると、
「エクセル マクロ find after 範囲」
「vba find after 検索範囲」
「vba find after 列指定 使い方」
といった検索キーワードでのアクセスも少なからず見かけます。
これらの検索をなさった方は、Range.Findメソッドの引数・Afterで、検索するセル範囲を指定できると考えてらっしゃるのかもしれません。
既にご紹介しているとおりFindメソッドで検索する範囲は、Findメソッドの引数ではなく、Rangeオブジェクトで指定します。
先のマクロを、例えば、
Columns("B:C").Find(What:="a", After:=ActiveCell).Select
とすれば、B列とC列の中で検索が行われ、
Rows("3:5").Find(What:="a", After:=ActiveCell).Select
とすれば、3行目から5行目の中で検索が行われ、
Range("B2", "G7").Find(What:="a", After:=ActiveCell).Select
とすれば、B2:G7セルの中で検索が行われます。
Home » Excel VBA Rangeオブジェクト » セル検索 » Findメソッドの引数・Afterの使い方