VBAでExcel作業を自動化するとき、データの最終行を正確に取得できるかは非常に重要です。
特に、データ量が変わるシートを扱う場合、最終行取得に失敗すると、思わぬエラーやデータ破損を引き起こします。
この記事では、VBAで最終行を取得する代表的な4つの方法を、メリット・デメリット付きで徹底解説します。
用途に応じた最適な手段を選べるよう、最後に比較表も掲載しました!
目次
最終行を取得する4つの方法
Excel VBAで最終行を取得する代表的な方法は以下の4つです。
方法 | 特徴 |
---|---|
End メソッド | 速くてシンプル、空白には弱い |
Find メソッド | 空白をまたいでも正しい最終行を特定可能 |
SpecialCells メソッド | 最終編集セルに基づく範囲取得 |
UsedRange プロパティ | シート全体の「使用範囲」から最終行を取得 |
それぞれ得意・不得意があるため、目的に応じて使い分けましょう!
方法1:Endメソッド
Endメソッドの概要
最も基本的でポピュラーな方法です。
指定した列(例:A列)を下から上に向かって辿り、最初にデータがあるセルを取得します。
Endメソッドのコード例
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
上記コードでは、下図のような流れで「A列(列番号1)の最終行」を取得しています。

Endメソッドのメリット・デメリット
メリット | デメリット |
---|---|
シンプル・高速 | 間に空白があると正しく取れないことがある |
方法2:Findメソッド
Findメソッドの概要
セルの中で最後にデータが入力されているものを検索する方法です。
空白行が途中にあっても正しい最終行を見つけられます。
Findメソッドのコード例
Dim lastRow As Long
lastRow = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
コードのポイント
What:="*"
→ すべてのデータが対象SearchDirection:=xlPrevious
→ 最後のセルを検索
Findメソッドのメリット・デメリット
メリット | デメリット |
---|---|
空白があっても正確 | 処理が少し重くなることがある |
方法3:SpecialCellsメソッド
SpecialCellsメソッドの概要
編集された最後のセル(特別なセル)を取得する方法です。
一見便利ですが、削除履歴などが残っていると誤作動します。
SpecialCellsメソッドのコード例
Dim lastRow As Long
lastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
SpecialCellsメソッドの注意点
- シート上に実際に存在しないデータも対象になる場合がある
- 信頼性は他よりやや低い
方法4:UsedRangeプロパティ
UsedRangeプロパティの概要
シート全体の「使用された範囲」を基準に、最終行を取得する方法です。
UsedRangeプロパティのコード例
Dim lastRow As Long
lastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
各方法の比較表|おすすめの選び方
方法 | 使用に向いている場面 | 注意点 |
---|---|---|
End メソッド | 列が明確で空白がほぼないデータ向け | 空白を挟むと誤検知の可能性あり |
Find メソッド | 空白や不規則なデータ行がある場合に最適 | データ量の多いシートではやや遅い |
SpecialCells メソッド | 編集頻度が高いが簡単な確認で良い場合 | 信頼性が低い(特に削除履歴) |
UsedRange プロパティ | シート全体の範囲を見たいとき | 古い編集履歴に引っ張られる場合あり |
まとめ
最終行を取得する方法には、それぞれ得意・不得意があります。
迷ったら次の基準で選びましょう!
- 単純な表の最終行 →
End
メソッド - 空白行を挟む複雑データ →
Find
メソッド - 簡易確認・ラフな作業 →
SpecialCells
メソッド - シート全体把握したい →
UsedRange
プロパティ
最適な方法を選び、安定したマクロ作りに役立ててください!