要点まとめ
Excel VBAのFindメソッドは「検索と置換」の検索機能をVBAから使えるものです。最終セルを取得する際にも応用できます。重要なのは、各パラメータの意味を理解して正しく指定することです。
Findメソッドの基本構文
Range.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
VBパラメータの意味(初心者向けにかみ砕いて)
- What(必須)
- 検索する文字列や数値。例:
"東京" - 最終セルを探す場合は
"*"(ワイルドカード)を使うことが多い。
- 検索する文字列や数値。例:
- After(省略可)
- 検索開始位置。指定したセルの「次」から検索が始まる。
- 省略すると範囲の左上セルの次から検索するため、最初のセルが検索対象外になる点に注意 インストラクターのネタ帳。
- LookIn
- どの情報を検索するか。
xlValues→ 値xlFormulas→ 数式xlComments→ コメント
- 通常は
xlValuesを使う。
- どの情報を検索するか。
- LookAt
- 一致条件。
xlWhole→ 完全一致xlPart→ 部分一致
- 例:
"東京"と完全一致か、"東京都"の中に含まれるか。
- 一致条件。
- SearchOrder
- 検索の方向。
xlByRows→ 行ごとに検索xlByColumns→ 列ごとに検索
- 最終行を探すなら
xlByRowsが多い。
- 検索の方向。
- SearchDirection
- 検索の進む方向。
xlNext→ 前方(通常)xlPrevious→ 後方(逆方向)
- 最終セルを探すときは
xlPreviousを使うと便利。
- 検索の進む方向。
- MatchCase
- 大文字小文字を区別するか。
True→ 区別するFalse→ 区別しない
- 大文字小文字を区別するか。
- MatchByte
- 半角と全角を区別するか。日本語環境で利用。
- SearchFormat
- 書式条件で検索するか。通常は使わない。
最終セルを取得する例
最終行を探す
Sub 最終行をFindで取得()
Dim rng As Range
' A列の最後に入力されているセルを検索
Set rng = Range("A:A").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious)
MsgBox "最終行は " & rng.Row & " 行目です"
End Sub
VBWhat:="*"→ 何か入っているセルを検索SearchDirection:=xlPrevious→ 後ろから検索するので「最後のセル」が見つかる
最終列を探す
Sub 最終列をFindで取得()
Dim rng As Range
' 1行目の最後に入力されているセルを検索
Set rng = Rows(1).Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious)
MsgBox "最終列は " & rng.Column & " 列目です"
End Sub
VB注意点
- 省略したパラメータは「前回の検索条件」が残るため、意図しない結果になることがある。必ず明示的に指定するのが安全。
- Afterの指定ミスで最初のセルが検索対象外になることがあるので、最終セル検索では「範囲の最後のセル」を指定するのが定番。
まとめ
Findを使えば「最後の行・列」を柔軟に取得できます。特に What:="*" + SearchDirection:=xlPrevious の組み合わせが最終セル取得の定番です。
