はじめに
Excel VBAを使っていると、データがどこまで入力されているかを知るために「最終行」を取得する場面はよくあります。
この記事では、VBAで最終行を取得する代表的な3つの方法と、それぞれの使いどころを具体的に解説します。
1. Rows.Count と End プロパティを使う方法(定番)
最もよく使われるのが、この**Rows.Count + End(xlUp)**を使う方法です。
シートの最下行から上に向かってデータを探す仕組みです。
Sub GetLastRow_End()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得
MsgBox "最終行は " & lastRow & " 行目です"
End Sub
ポイント
Cells(Rows.Count, 1)
→ A列の最下行End(xlUp)
→ 上方向に移動して最初に見つかったセル- 空白がない縦方向のデータに最適
2. UsedRange を使う方法(全体範囲)
ワークシートの使用されている範囲をもとに最終行を取得します。
Sub GetLastRow_UsedRange()
Dim lastRow As Long
lastRow = ActiveSheet.UsedRange.Rows.Count
MsgBox "最終行は " & lastRow & " 行目です"
End Sub
ポイント
- シートの全範囲をチェックするので、列や行に空白があっても取得可能
- ただし以前使っていたセルが残っている場合もカウントされることがある
3. Find メソッドを使う方法(高速検索)
特定列の最後のデータを探す方法です。
Sub GetLastRow_Find()
Dim lastRow As Long
lastRow = Cells.Find(What:="*",SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row
MsgBox "最終行は " & lastRow & " 行目です"
End Sub
ポイント
- 空白を含むデータでも正確に取得可能
- 大量データでも処理が速い
- 条件付き書式や数式がある場合でも取得できる
4. どの方法を使えばいいのか?
方法 | 特徴 | 長所 | 短所 |
---|---|---|---|
Rows.Count+End | 定番 | コードが短い、覚えやすい | 空白があると正しく取れない |
UsedRange | 全範囲 | 空白行があってもOK | 過去のデータ痕跡も取得してしまう |
Find | 高精度 | 高速・正確 | 少しコードが長い |
5. 実用例:最終行までループ処理
最終行を取得してループで処理するのがよくあるパターンです。
Sub LoopUntilLastRow()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Dim i As Long
For i = 1 To lastRow
Debug.Print Cells(i, 1).Value
Next i
End Sub
まとめ
- 定番は Rows.Count + End(xlUp)
- 空白がある場合や正確性重視なら Find
- 全体範囲を扱うなら UsedRange
用途に応じて使い分けることで、VBAコードがより効率的になります。