- 「A列の一番下のデータがどこか分からず手作業になってしまう」
- 「途中に空白があると最終行の取得がずれる…」
- 「UsedRangeやLastCellの違いがよく分からない」
VBAで最終行を正確に取得できれば、データの貼り付け・集計・ループ処理まで自動化がぐっとラクになります。
この記事では、よく使われる最終行取得テクニックを用途別にわかりやすく解説していきます!
End(xlUp) を使った最も一般的な方法
特定の列の最終行を取得したいときは、End(xlUp) を使うのがベストです。途中に空白があっても、最後にデータがある行を正確に取得できます。
A列の最終行を取得するコード例
Sub GetLastRow_ColumnA()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ThisWorkbook.Sheets("データ")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
MsgBox "A列の最終行は: " & lastRow & " 行目です"
End Sub
このコードでは、Excelの最終行(1048576行目)から上に向かってデータがあるセルを探し、その行番号を返します。
表の末尾や集計結果の下に新しい行を追加したいときにも便利です。
SpecialCellsを使って「本当に使われている最後の行」を取得
UsedRangeでは信用できない…そんなときに便利なのが SpecialCells。シート上で最後に使用されたセルの行を取得することができます。
最終使用セルの行を取得するコード例
Sub GetLastUsedRow()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ThisWorkbook.Sheets("データ")
On Error Resume Next
lastRow = ws.Cells.SpecialCells(xlCellTypeLastCell).Row
On Error GoTo 0
MsgBox "最終使用行は: " & lastRow & " 行目です"
End Sub
この方法は「データが入力されたことがある最後のセル」を基準にしているため、見た目には空白でも、書式や一度入力された履歴があるセルも対象になります。
信頼性が必要な処理では注意しましょう。
UsedRangeから最終行を求める方法
UsedRangeを使えば、シート全体で使用されている範囲の中から最終行を取得できます。行の範囲をループ処理に使いたいときに便利です。
UsedRangeで最終行を取得するコード例
Sub GetLastRow_UsedRange()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ThisWorkbook.Sheets("データ")
lastRow = ws.UsedRange.Rows(ws.UsedRange.Rows.Count).Row
MsgBox "UsedRangeの最終行は: " & lastRow & " 行目です"
End Sub
UsedRangeは、一度でも編集や入力が行われたセル範囲を指します。
ただし、行や列を削除しても範囲が残ることがあるため、正確性には注意が必要です。
まとめ:目的に応じた最終行取得でVBAを強化しよう!
VBAで最終行を取得するには、目的に応じた方法を選ぶことが大切です。
特定の列なら End(xlUp)
、全体の最終使用行なら SpecialCells
や UsedRange
が使えます。
今回のポイント
- ✅ データ入力の最終行 →
Cells(...).End(xlUp)
- ✅ 使用履歴を含む最終行 →
SpecialCells(xlCellTypeLastCell)
- ✅ 範囲処理に便利 →
UsedRange
最終行の取得を正しく使いこなせば、エラーの少ない自動化処理ができるようになりますよ!💪
コメント