【VBA入門】最終行を取得する3つの方法と実用例(Rows.Count・End・Find)

VBA最終行取得 VBA
記事内に広告が含まれています。

はじめに

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コードがより効率的になります。
タイトルとURLをコピーしました