「excel vba currentregion 最終行」
という検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
RangeオブジェクトのCurrentRegionプロパティで取得できるセル範囲の、
最終行(最後の行・一番下の行)の行番号を取得する、Excel VBA(Visual Basic Applications)のコードを探していらしたのでしょうか。
この記事では、異なる考え方のマクロを二つご紹介します。
アクティブセル領域の最終行番号を取得するサンプルマクロ
一つはコレクションオブジェクトとしてのRangeから、単一オブジェクトとしてのRangeを取得するオブジェクト式を利用したマクロです。
以下のマクロを実行すると、アクティブセル領域の最終行番号がメッセージボックスに表示されます。
MsgBox _
ActiveCell.CurrentRegion(ActiveCell.CurrentRegion.Count).Row
「ActiveCell.CurrentRegion.Count」というオブジェクト式で、アクティブセル領域に含まれるセルの数を取得できます。
「ActiveCell.CurrentRegion.Count」というオブジェクト式を、ActiveCell.CurrentRegionプロパティの引数(正確にはRangeオブジェクトの既定のプロパティの引数)に指定した「ActiveCell.CurrentRegion(ActiveCell.CurrentRegion.Count)」というオブジェクト式で、アクティブセル領域(コレクションオブジェクトとしてのRange)の最後のセルを表す単一オブジェクトとしてのRangeを取得できます。
「ActiveCell.CurrentRegion(ActiveCell.CurrentRegion.Count)」というオブジェクト式で取得した、アクティブセル領域の最後のセルを表すRangeオブジェクトのRowプロパティを取得すれば、CurrentRegionの最終行番号を取得できることになります。
Split関数を使ってアクティブセル領域の最終行番号を取得する
もう一つは配列の考え方を利用した、Split関数を使ったマクロです。
以下のマクロを実行した場合も、アクティブセル領域の最終行番号がメッセージボックスに表示されます。
MsgBox _
Split(ActiveCell.CurrentRegion.Address , "$")(4)
「ActiveCell.CurrentRegion.Address」というオブジェクト式は、必ず「$A$1:$G$7」のような形で、アクティブセル領域のアドレスを表す文字列を、絶対参照の形で返します。
この文字列内に「$」は、必ず4つ存在していて、4つ目の「$」の後ろの数字が、アクティブセル領域の最終行番号を表しています。この数字を取得しているのが「Split(ActiveCell.CurrentRegion.Address , "$")(4)」というコードです。
「Split(ActiveCell.CurrentRegion.Address , "$")(4)」というコードの意味がわからないという方は、まず以下の記事を理解しましょう。
Home » Excel VBA Rangeオブジェクト » CurrentRegionプロパティ » CurrentRegionの最終行番号