【EXCEL VBA】最終行を取得したい

表データを処理する際、頭から舐めてデータが存在する最終行まで処理したい場面は多々あると思います。基本的な部分ですが、改めて記事にしました。

End(xlDown)で解決する

指定したRangeの最終行を取得したい場合は、End(xlDown)を使用します。ExcelでCTRL + ↓を押した時と同様の動きとなります。サンプルプログラムに記載しましたが、注意点としては途中に空白があると、そこが最終行の判断ポイントとなってしまう事です。

途中で空白行があるデータの(本当の)最終行を取得したい場合は、Excelの最終行(1048576行目)を指定してから、End(xlUp)を指定することで解決することができます。

最終行の取得したいということは、何かしらのループ処理をしたい事と思いますので、サンプルプログラムにループ処理の例を追加したので、参考にしていただければと思います。

サンプルプログラム

Option Explicit

Dim r As Range
Dim s As Range

Sub sample()
    Set r = Range("C3")
    Debug.Print r.Value     ' a1
    
    Set r = r.End(xlDown)
    Debug.Print r.Value     ' a3
    
    Set r = r.End(xlDown)
    Debug.Print r.Value     ' a4
    
    Set r = r.End(xlDown)
    Debug.Print r.Value     ' a6
    
    Debug.Print "@@@"
        
    Set r = Cells(Rows.Count, 3)    ' Excel最下段を指定(1048576行目)
    Set r = r.End(xlUp)
    Debug.Print r.Value     ' a9    ' 最終行

    Set s = Range("C3")
    While s.Row <> r.Offset(1, 0).Row   ' (最終行+1)に到達するまでループ
        Debug.Print s.Value
        Set s = s.Offset(1, 0)  ' a1 a2 a3   a4 a5 a6   a7 a8 a9
    Wend

End Sub