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