\ お問い合わせはこちら! /

【VBAで最終行を正確に取得!】データ処理をミスなくスマートに

  • 「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)、全体の最終使用行なら SpecialCellsUsedRange が使えます。

今回のポイント

  • ✅ データ入力の最終行 → Cells(...).End(xlUp)
  • ✅ 使用履歴を含む最終行 → SpecialCells(xlCellTypeLastCell)
  • ✅ 範囲処理に便利 → UsedRange

最終行の取得を正しく使いこなせば、エラーの少ない自動化処理ができるようになりますよ!💪

この記事が気に入ったら
フォローしてね!

シェア・記事の保存はこちら!

この記事を書いた人

CFXLOGのアバター CFXLOG プログラマ

メイン言語はPython。本ブログでは、実務や普段の学習で学んだことをアウトプットしています。
基本情報技術者試験合格者。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)