VBAで最終行を取得する方法と そこからできること|Excel VBA

Excel VBAで データの入っている 最終行 を取得する。

VBAを使っていると、シート上で データの「最終行の行番号取得」が必要になることが多々あります。
VBA 最終行」といったキーワードでサイト検索してみると、いろいろなパターンで最終行を求める手法が紹介されていますね。

今回は最もシンプルにデータの入った最終行を取得する方法と、最終行の行番号を取得できたことによって可能になるいくつかのことを紹介します。



VBAで最終行を取得する方法

Excelのデータベースに新たなレコード(行)を自動で追加登録するときなど、データが入力されている「最終行」を取得したい状況になります。

VBAで最終行を取得する方法をステップ・バイ・ステップで述べていきます。

Excelシートの最大行数

データが入力されている最終行を求める前に、そもそもExcelシートの行は何行あるのでしょうか?
実は Excelのバージョンによって最大行数は違います。

Excel2003以前: 65,536行
Excel2007以降: 1,048,576行

Excel は2003から2007にバージョンアップする際に大幅に最大行数と列数を増やしました。
これによってExcelはデータベースとしての容量をパワーアップしました。

VBAで最終行を取得するコード

では、最終行を求めるVBAのコードを紹介します;

Cells(Rows.Count, 1).End(xlUp).Row

このコードの意味するところは、赤字の Rows.Count の部分が Excelシート全体の行数を表します。
つまり、Excel2003であれば 65,536行、Excel2007以上であれば 1,048,576行ということです。

Cells(Rows.Count, 1) はつまり、A列の最終行のセルを指します。A65536 あるいは A1048576 です。

ここから Endモードで一気にデータが入っている行まで上にジャンプするのが .End(xlUp)ということ。
最後の .Row が「そのセルの行」という意味で、つまり データの入力されている最終行 ということになります。

理屈を理解するのが面倒な方は、コードだけ覚えておけばひとまず目の前の課題は解決ですね。

変数に最終行を代入する実践的使用例

ではここで VBAの使用例を紹介します。
下のような Excelシートがあったとします。

上の表でデータの入っている最終行をVBAを使って求めます。

Option Explicit


'*********************************************************
'   データ最終行の取得  Get_LASTROW
'*********************************************************
Sub Get_LASTROW()
  Dim LASTROW As Long

  ' 最終行の取得
  LASTROW = Cells(Rows.Count, 1).End(xlUp).Row

  MsgBox LASTROW & " 行目が最終行です。"
End Sub
'-----------------<< End of Source >>------------------

上のサンプルは、LASTROW という変数に、データの最終行番号を代入してメッセージボックスに表示するコードです。

このマクロを実行すると;

このように「7行目」と正しく最終行を返します。

最終行を取得してできること

つぎは、VBAを使ってデータの入力された最終行の行番号を得たことによって「できること」をいくつか紹介します。

VBAで最終行までセル範囲を選択する

データエリア、つまり データの先頭行から最終行までを選択する コードです。
データ量が流動的なデータベースの場合、行数に固定値を入れるわけにはいきません。

でも、もう安心。
さきほどのコードを応用すればいつでも的確にデータエリアを選択することが可能です。
使用する Excelシートは「変数に代入する実践的使用例」で使用したものと同じとします。

この場合のコードはこうなります;

Option Explicit


'*********************************************************
'   データ最終行の取得  Get_LASTROW
'*********************************************************
Sub Get_LASTROW()
  Dim LASTROW As Long

  ' 最終行の取得
  LASTROW = Cells(Rows.Count, 1).End(xlUp).Row

  Range(Cells(3, 1), Cells(LASTROW, 4)).Select
End Sub
'-----------------<< End of Source >>------------------

▲赤字の部分がデータエリア、データの先頭行から最終行までを選択するコード

これを実行すると;

上のように、セルA3 からセルD7 までを選択します。

VBA 最終行の次の行を選択する

つぎは、最終行の次の行を選択する コードです。
新規レコードを新たに追加登録する場合などは、最終行のひとつ下の行を選択する必要があります。

この記事をここまで読んでくださるような方は、ここまで書けばすべて把握できているかとは思いますが、一つ前の項目で使用したコードに手を加えたサンプルをお見せします。

Option Explicit


'*********************************************************
'   データ最終行の取得  Get_LASTROW
'*********************************************************
Sub Get_LASTROW()
  Dim LASTROW As Long

  ' 最終行の取得
  LASTROW = Cells(Rows.Count, 1).End(xlUp).Row

  Cells(LASTROW + 1, 1).Select
End Sub
'-----------------<< End of Source >>------------------

▲ここも赤字部分が 最終行の次の行を選択するサンプルです。

LASTROW + 1 ってところがミソです。

VBA 最終行を削除する

つぎは、最終行の削除 です。
例えば新規データを先頭行に挿入して、最終行(一番古いレコード)削除する、といった場合に使用します。

これも先ほどのコードを応用してサンプルを作成します。

Option Explicit


'*********************************************************
'   データ最終行の取得  Get_LASTROW
'*********************************************************
Sub Get_LASTROW()
  Dim LASTROW As Long

  ' 最終行の取得
  LASTROW = Cells(Rows.Count, 1).End(xlUp).Row

  Rows(LASTROW).Delete Shift:=xlUp
End Sub
'-----------------<< End of Source >>------------------

▲このコードを実行すると、サンプルシートの7行目「小林 浩司」の行が削除されます。

VBAで最終行を取得できないという方へ

「最終行を取得できない」という方は、Excelシートのデータエリアの「列」をあらためてチェックしてみてはいかがでしょうか。

例えば 下のようなシートの場合、データエリアはA列ではなくB列から始まっています。

それなのに、Cells(Rows.Count, 1).End(xlUp).Row と、コードを書いても動きません。
赤字で書いた「1」は A列を指しています。
B列をチェックさせたいのならば、Cells(Rows.Count, 2).End(xlUp).Row と書かなければいけません。

以上、Excel VBAで データの入っている最終行を取得する でした。

関連記事・広告






-VBA, EXCEL&VBA
-,

© 2022 h1r0-style.net