「excel find 開始位置 最初に」
「エクセル マクロ find 開始位置指定 最後の行」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
RangeオブジェクトのFindメソッドで、
検索開始位置を指定する方法について調べている方による検索です。
フィールド見出しの存在するワークシートだけで、Range.Findメソッドを使ってらっしゃる方は、
「excel find 開始位置 最初に」
「エクセル マクロ find 開始位置指定 最後の行」
という検索をした方の気持ちがわからないかもしれません。
Range.Findで失敗するケース
下図のように、フィールド見出しが存在しない、1行目からいきなりデータの存在するワークシートで、
以下のようなマクロを使って「北海道」と入力されているセルを検索すると、A1セルではなくA7セルがヒットしてしまうのです。
Dim rng As Range
Set rng = Range("A:A").Find(What:="北海道")
If rng Is Nothing Then
MsgBox "見つかりませんでした。"
Else
MsgBox rng.Address(False, False)
End If
Range.Findメソッドは、引数・Afterが指定されていないときには、検索範囲の左上端のセルの、次のセルから検索するのが仕様だからです。
先の例では、検索範囲の左上端であるA1セルの次のセルから検索が行われるため、A1セルではなくA7セルがヒットします。
この解決方法を探していたのが、
「excel find 開始位置 最初に」
「エクセル マクロ find 開始位置指定 最後の行」
という検索キーワードです。
検索開始位置を最終行に
1行目にあるデータも検索したい場合には、引数・Afterに、最後のセルを指定してやればOKです。
具体的には、下図のようなマクロにすると、先のような例でA1セルがヒットします。
Dim rng As Range
Set rng = Range("A:A").Find( _
What:="北海道", _
After:=Cells(Rows.Count, "A").End(xlUp))
If rng Is Nothing Then
MsgBox "見つかりませんでした。"
Else
MsgBox rng.Address(False, False)
End If
Range.Findメソッドの引数・Afterに、A列の最終行のセルを表すオブジェクト式「Cells(Rows.Count, "A").End(xlUp))」を指定しています。
A列の最後のセルが引数・Afterに指定すると、このセルの次のセルである、A列の一番上のセルから検索が行われるわけです。
Home » Excel VBA Rangeオブジェクト » セル検索 » Findの検索開始位置を最終行に