MENU

【保存版】最終行を取得する4つの方法|End・Find・UsedRangeの違いも徹底解説!

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プロパティ

最適な方法を選び、安定したマクロ作りに役立ててください!

この記事を書いた人

めんどくさがりでズボラ。
某自動車メーカーで、VBAやRPAを用いた業務効率化を行っております。

目次