VBAで最終行を取得するには?|End(xlUp)、SpecialCells(xlLastCell)

Excelで最終行のデータを取得する方法が知りたい
選択したセルの範囲最終行を取得したい
取得できない場合はどうすればいいの?

Excelで表を作成していて何度も、最終行にデータを追加したり、削除したりすることってありませんか?データ数が多くなると最終行がどこか把握するのも大変ですよね。

そんな時こそ、VBAを使って自動化しましょう。

この記事ではVBAを使用して最終行を取得する方法について、基本的な方法から、空白セルが途中にあって取得できない場合、セルの範囲から最終行を取得する方法について解説していきます。

この記事は以下の内容で解説していきます。

  • Excelで最終行を取得したい
  • セル範囲から最終行を取得したい
  • 空白セルが途中にあり取得できない場合

読み終える頃にはVBAで最終行を取得できるようになりますので、ぜひ参考にしてください。

Excel VBAで最終行を取得する基本

キー操作で最終行を取得

最終行を取得する方法をVBAで作成するまえに、まずはキー操作だけで最終行まで飛ぶ方法について確認しましょう。

「Ctrl + ↓」キーでできます。

C4にカーソルを置き、「Ctrl + ↓」キーを押してみてください。

End01

このように最終行まで移動することがわかりますね。

End(xlDown)で最終行を取得

上記の操作をVBAで記述すると、以下のようになります。

実行結果:
End10

C4から開始しているのでCells(4, 3)と指定しています。

このようにEnd(xlDown).Selectを使うことで、「Ctrl + ↓」キーを押したときと同じように最終行を選択することができます。

空白セルが途中にあり取得できない場合は?

先ほどは「Ctrl + ↓」キーを押して最終行まで飛ぶ方法、End(xlDown).Selectを使う方法についてお伝えしました。しかし、これだけでは少々問題があります。

途中で空白セルがあった場合に、「Ctrl + ↓」キーを押しても最終行まで飛べないのです。つまり、途中の空白セルで止まってしまいます。

End02

D4にカーソルがある状態で、「Ctrl + ↓」キーを押してみましょう。空白セルの1つ手前、D6で止まってしまいます。

こんなとき、良い方法があります。

End(xlUp)を使って対策

それはいったん一番下のセルまで飛んで、次に上に上がるという方法です。一番下とは、Excelスプレッドシートの一番下という意味で、Excel2003形式(拡張子が.xls)では65536で、Excel2007以降(拡張子が.xlsx)では1048576です。

一番下のセルの行数はRows.Countで取得できます。上に上がるにはEnd(xlUp)を使います。

この操作をVBAで記述してみましょう。

実行結果:
End10

End03

使われたセル範囲から最終行を取得

これまでお伝えしてきた方法の他にも最終行を取得する方法があります。使われたセル範囲から取得する方法です。

いくつか方法がありますので、それぞれ説明していきます。

SpecialCells(xlLastCell)を使う方法

Excelシート上でA1を選択して「Ctrl + Shift + End」キーを押すと、以下のような状態になります。

End05

色がグレーに変わった範囲が、使われたセル範囲です。使われたセル範囲を取得し、同時に行と列の最終地点も取得できます。

先ほどのキー操作「Ctrl + Shift + End」キーは、VBAで記述するとSpecialCells(xlLastCell)になります。

サンプルコードで確認しましょう。

実行結果:
End06

UsedRangeを使う方法

WorkSheetオブジェクトのUsedRangeプロパティを使って使われたセル範囲を取得することもできます。UsedRangeのRowsプロパティの引数にUsedRange.Rows.Countで取得した総行数を指定することで、最終行を取得することができます。

サンプルコードで確認しましょう。

実行結果:
End06

ただし、UsedRangeプロパティは罫線が引かれていると、罫線が引かれている行を最終行として取得するので注意しましょう。

End07

CurrentRegionを使う方法

RangeオブジェクトのCurrentRegionプロパティを使って使われたセル範囲を取得することもできます。CurrentRegionプロパティの引数にCurrentRegion.Countを指定することで、最終行を取得することができます。

サンプルコードで確認しましょう。

実行結果:
End06

ただし、CurrentRegionを使う場合は空白行が途中であると上手くいきませんので注意しましょう。

End09

最終行の下にデータを追加

最終行を取得する目的は、その下にデータを追加するか、最終行のデータを削除する場合が多いです。今回は最終行の下に行を追加してみましょう。

Rows.CountとEnd(xlUp)を使って最終行を取得し、その値に+1して位置を指定します。先ほどの表を使って確認しましょう。

実行結果:
End04

実行結果の写真では追加したデータにさらに罫線を付けています。罫線を付ける方法については、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。

初心者必見!VBAで罫線を引く方法をわかりやすく解説!
更新日 : 2018年10月11日

まとめ

本記事では、セルの最終行を取得する方法について、さまざまパターンを解説しました。この方法を使って、業務に応用できそうですね。
ぜひ、最終行の取得を使いこなしてみてくださいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

本多 農

本多 農

関西在住のITエンジニアです。普通の会社に勤務しながら、侍エンジニアのインストラクター、ライターとして活動しています。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説