Home » ExcelVBA Rangeオブジェクト » セル検索 » Findメソッドの引数・Afterの使い方

Findメソッドの引数・Afterの使い方

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「excel vba find after 使い方」
「vba find after 書き方」
「vba find afterの指定方法」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが、時折あります。

FindメソッドのAfterの使い方

Excel VBA(Visual Basic for Applications)の、Range.Findメソッドの引数・Afterの使い方を調べている方による検索です。

[スポンサードリンク]

Range.Findメソッドの引数・Afterを確認するサンプルマクロ

RangeオブジェクトのFindメソッドの引数・Afterは、検索を開始する起点にしたいセルを指定します。Range.Findは、引数・Afterに指定されたセルの次のセルから検索を行います。

簡単なマクロを動かしてみるほうが理解しやすいでしょう。

アクティブなワークシートの、いくつかのセルに「a」という文字列を入力しておいて、以下のマクロを実行してみてください。
Sub FindメソッドのAfterの使い方()
 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 » ExcelVBA Rangeオブジェクト » セル検索 » Findメソッドの引数・Afterの使い方

「セル検索」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.