ExcelでVBAを使うとき、
「データの最終行を自動で取得したい!」
と思うことはありませんか?
たとえば、毎回データの行数が違う表を扱うとき、最終行を自動で取得できると、
コピーや集計などの処理を効率的に行うことができます。
今回は、最終行を取得するVBAコードをわかりやすく紹介します!
最終行を取得する基本的なVBAコード
まずは一番よく使われる定番コードです。
Sub 最終行を取得する()
Dim lRow As Long
lRow = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox "最終行は " & lRow & " 行目です"
End Subコードのポイント
Cells(Rows.Count, 1)
Excelの**最下行(=1048576行目)**のA列を指定しています。
.End(xlUp)
一番下から上に向かってデータを探し、最後にデータがあるセルを見つけます
.Row
見つけたセルの「行番号」を取得します。
特定のシート・列を指定したい場合
次のように、特定のシートや列を指定することもできます。
Sub 最終行を取得する方法2()
Dim ws As Worksheet
Dim lRow As Long
Set ws = ThisWorkbook.Sheets("データ")
lRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
MsgBox "シート『" & ws.Name & "』のB列の最終行は " & lRow & " 行目です"
End Sub複数シートを扱うツールなどでは、このようにシートを変数で指定する方法が安全です。
UsedRangeを使って取得する方法
別の方法として、UsedRangeを使うとデータが入力されている範囲全体から最終行を取得できます。
Sub 最終行を取得する方法3()
Dim lRow As Long
lRow = ActiveSheet.UsedRange.Rows.Count
MsgBox "最終行は " & lRow & " 行目です"
End Subただし、この方法は
- セルの書式設定だけされている行もカウントされる
- 一度削除したセルも範囲に含まれることがある
という注意点があります。
応用:最終列を取得する
最終行だけでなく、「最終列」も取得したい場合はこちら。
Sub 最終列を取得()
Dim lCol As Long
lCol = Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox "最終列は " & lCol & " 列目です"
End Subまとめ
| 方法 | 特徴 |
| Cells(Rows.Count, 1).End(xlUp).Row | 最も安定して使える定番の方法 |
| UsedRange.Rows.Count | 使用範囲を簡単に取得できるが精度はやや劣る |
xlToLeft / xlUp | 最終列や最終行を方向指定で取得 |
最終行の取得は、VBAの基本中の基本。
たとえば、下のような場面で役立ちます。
- データの最終行までループ処理したい
- 最終行の下に新しいデータを追加したい
- グラフや集計範囲を自動で設定したい
最終行をうまく使いこなせば、
Excelの自動化がぐっとスムーズになります。


コメント