
VBAでfor nextステートメントなどでループを回す際、対象となる範囲の最終行の番号を自動的に取得できると便利です。
今回はワークシート内のデータがある最終行番号を取得する方法についてまとめていきます。
コードサンプル
1 2 3 4 5 |
Sub 最終行取得() Dim LastRow As Long LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row MsgBox LastRow End Sub |
2行目の”LastRow”は変数名です。
この変数には数値が入りますので、変数名のデータ型は「Long」にしています。
3行目は、変数”LastRow”の中身を設定しています。
ここが若干複雑です。
まず、「Cells(Rows.Count, 1)」でアクティブになっている(最後に開いた)シートの1列目(A列)の最終行を取得します。
ここでの最終行とは、ワークシートの一番下の番号を指します。
つまりExcel2007以降は”1048576″ですね。
それを特定してから、「End(xlUp)」でワークシート上のショートカットでいう[Ctrl]+「↑」を行ったと同様に上方向にデータがあるセルへジャンプさせます。
すると、何かしらデータのある行を指定することができます。
最後に「Row」の部分で行番号を返します。
長い解説になりましたが3行目をまとめると、変数”LastRow”はアクティブシートのA列のデータが何かしらデータがある最後のセルの番号(数値)となります。
4行目は、その変数”LastRow”をMsgBox関数でメッセージとして通知します。
マクロの動作イメージ
このようにメッセージでA列のデータがある最終行の番号を通知できます。
ちなみに「End(xlUp)」が抜けていると、データの有無関係なくワークシートの最終行が返りますのでご注意下さい。(Excelのバージョンによって最終行数は変わります)
まとめ
データがある最終行数を、対象のデータ数に応じて可変にしたい場面はかなり頻度が高いです。
今回のサンプルではMsgBox関数で簡単に解説しましたが、この部分を任意のコードに置き換えてもらえば、様々なケースに応用できますよ。
ご参考になれば幸いです(^^)