【VBA】最終行を取得する2つの方法
今回はExcel VBAで最終行を取得する方法を紹介します。
最終行を取得する方法はたくさんあるのですが、その中で使い勝手の良い方法を紹介します。
特定の列の最終行を取得 End(xlUp)
Sub GetEndRow()
Dim endRow As Long
'A列の最終行を取得
endRow = Cells(Rows.Count, 1).End(xlUp).Row
End Sub
最終行の取得で最もポピュラーなのはこの方法です。
End(xlUp)はExcel上で「Ctrl+↑」を押したときと同じ役割を果たします。
一番下のセルCells(Rows.Count, 1)から上に向かって移動して、入力済の最終行を探すといったイメージになります。
コード説明
Rows.Countは最大行数(現在のExcelだと1048576)です。そのためCells(Rows.Count, 1)はA列の一番下のセルとなります。
そこからCells(Rows.Count, 1).End(xlUp)で上に向かって移動して、入力済のセルへ移動します。
そしてRowプロパティによって入力済のセルの行数を得ています。
ちなみにサンプルコードではCells(Rows.Count, 1)としてA列の最終行を調べていますが、Cells(Rows.Count, 2)などと数値を変えればB列やC列の最終行を調べられます。
シート全体から最終行を取得 UsedRange
Sub GetEndRow2()
Dim endRow As Long, ws As Worksheet
Set ws = ActiveSheet
'シート全体から最終行を取得
endRow = ws.UsedRange.Rows(ws.UsedRange.Rows.Count).Row
End Sub
シート全体から入力済の最終行を探したい場合はUsedRangeプロパティを使用します。
UsedRangeプロパティはシート上の入力済セルを全て返してくれます。
そのため、上のようにA~C列で最終行が違う場合であっても一番下の行である8を返してくれます。
コード説明
ws.UsedRange.Rows.Countからは入力済セルの行の数が得られます。
ws.UsedRange.Rows(ws.UsedRange.Rows.Count)で入力済セルの中から一番下の行を取得します。
最後にRowプロパティによって入力済のセルの行数を取得しています。