Home » Excel VBA Rangeオブジェクト » セル検索 » Findの検索開始位置を最終行に

Findの検索開始位置を最終行に

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

「excel find 開始位置 最初に」
「エクセル マクロ find 開始位置指定 最後の行」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

RangeオブジェクトのFindメソッドで、

Findの検索開始位置を最終行に

検索開始位置を指定する方法について調べている方による検索です。

フィールド見出しの存在するワークシートだけで、Range.Findメソッドを使ってらっしゃる方は、
「excel find 開始位置 最初に」
「エクセル マクロ find 開始位置指定 最後の行」
という検索をした方の気持ちがわからないかもしれません。

[スポンサードリンク]

Range.Findで失敗するケース

下図のように、フィールド見出しが存在しない、1行目からいきなりデータの存在するワークシートで、

Findの検索開始位置を最終行に

以下のようなマクロを使って「北海道」と入力されているセルを検索すると、A1セルではなくA7セルがヒットしてしまうのです。

Sub sample()

 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

End Sub

Range.Findメソッドは、引数・Afterが指定されていないときには、検索範囲の左上端のセルの、次のセルから検索するのが仕様だからです。

先の例では、検索範囲の左上端であるA1セルの次のセルから検索が行われるため、A1セルではなくA7セルがヒットします。

この解決方法を探していたのが、
「excel find 開始位置 最初に」
「エクセル マクロ find 開始位置指定 最後の行」
という検索キーワードです。

検索開始位置を最終行に

1行目にあるデータも検索したい場合には、引数・Afterに、最後のセルを指定してやればOKです。

具体的には、下図のようなマクロにすると、先のような例でA1セルがヒットします。

Sub 検索開始位置を最終行にする()

 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

End Sub

Range.Findメソッドの引数・Afterに、A列の最終行のセルを表すオブジェクト式「Cells(Rows.Count, "A").End(xlUp))」を指定しています。

A列の最後のセルが引数・Afterに指定すると、このセルの次のセルである、A列の一番上のセルから検索が行われるわけです。

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » セル検索 » Findの検索開始位置を最終行に

「セル検索」の記事一覧

検索


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

.