【Excel VBA・マクロ】最終行を取得する方法まとめ|初心者でもわかるサンプルコード付き

ExcelVBA

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の自動化がぐっとスムーズになります。

コメント

タイトルとURLをコピーしました