こんにちは、タクローです。
Excel VBAを使っていると、表の最終行の行番号を取得したいシーンに出くわします。
- 表の最終行の下に新たな行を追加したいんだけど、どうすればいいの?
- 表のデータ件数を調べるには、どうすればいいの?
このような処理を実現するためには、表の最終行の行番号を取得する必要があるでしょう。
では、この最終行の行番号を取得するためにはどうすればよのでしょうか。
今回の記事では、下のような表をサンプルとして使っていきます。

このサンプルの場合、最終行の行番号は「7」になりますが、この数値を取得するための方法を解説していきます。
「セルA1」から始まって行番号「7」で終わるような表を何でもいいので作ってみてください。
後で出てくるExcel VBAコードサンプルを、ぜひコピペして実行してみてください。
慣れてきたら、自分好みにコーディングしてみて、いろいろなパターンで試してみてください。
実際に動かしてみた方が、理解しやすくなるはずです。
Endプロパティ
表の最終行の行番号を取得する方法を具体的に解説する前に、まず「End」プロパティを理解する必要があります。
みなさんはExcelで「Ctrl」キーと方向キーを押すと、データが入力されている範囲の終端セルまで移動することができるのをご存じでしょうか?
例えば、先ほどのサンプルの場合、セルA1を選択して「Ctrl」キーと「↓」キーを押すと、7行目まで移動することができるのです。
まずは、これをExcelVBAのコードで実現していきましょう。
この「Ctrl」キーと方向キーを押す動作と同じ働きをしてくれるのが「End」プロパティなのです。
Rangeオブジェクト.End(引数)
処理対象のRangeオブジェクトに対し、どちらの方向に移動させるかを引数で指定します。
引数については以下のとおりです。
引数 | 方向 |
---|---|
xlDown | 下 |
xlUp | 上 |
xlToLeft | 左 |
xlToRight | 右 |
先ほどのサンプルで最終行の7行目まで移動させるための具体的なコードは下のとおりです。
Public Sub Macro1()
ThisWorkbook.Sheets("Sample").Range("A1").End(xlDown).Select '最終行を選択
End Sub
セルA1(Range(“A1”))から、下方向へ終端セルまで移動(End(xlDown))してセルを選択する処理を行っています。
実際に、標準モジュールを新たに作成し、上のMacro1をコピペしていただき、マクロを実行してみてください。
セルA7が選択されるはずです。
表の最終行を選択するもう一つの方法
下のサンプルをご覧ください。

「セルA4」が空白になっていることに注意してください。
先ほどのコード(Macro1)を実行すると、セルA3を選択してしまいます。
このように表の最終行までの途中で空白セルがあった場合、最終行である7行目を選択することができません。
最終行である7行目を選択するにはどうすればよいのでしょうか?
答えは、「シートの最終行(1048576行目)」まで下がっておいて、上方向へ移動させればよいのです。
「シートの最終行(1048576行目)」を取得するには「Rows.Count」プロパティを使います。
次のサンプルコードを見てください。
Public Sub Macro2()
Dim MaxRow As Long 'シートの最終行
With ActiveSheet
MaxRow = .Rows.Count 'シートの最終行を取得
.Cells(MaxRow, 1).End(xlUp).Select '表の最終行を選択
End With
End Sub
先ほど作成した標準モジュールに、上のMacro2をコピペして、マクロを実行してみてください。
セルA7が選択されるはずです。
Macro2のコードを解説していきます。
まずコードをわかりやすくするため、ActiveSheetオブジェクトをWithステートメントで括っています。
そして、ActiveSheet、つまり選択しているシートに対し、「Rows.Count」プロパティを使ってシート最終行を取得し、その行数をLong型のMaxRowという変数に入れています。
次に、Cellsプロパティで「シート最終行(1048576行目)」の「1列目(A列)」を指定します。
それに該当するのが、「Cells(MaxRow, 1)」の箇所になります。
指定した場所(セルA1048576)から、End(xlUp)プロパティを使って表の最終行まで、上方向へ移動して選択(Select)しています。
これで、セルA7を選択することができるというわけです。
表の最終行数を取得する
さて、セルの行番号を取得するには「Row」プロパティを使います。
先ほどの「Rows.Count」の「Rows」と間違いやすいので注意しましょう。
「Row」プロパティは該当セルの行番号を返します。
次のサンプルコードを見てください。
Public Sub Macro3()
Dim LastRow As Long '表の最終行番号
With ActiveSheet
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row '表の最終行番号を取得
End With
MsgBox "最終行は" & LastRow & "行目です。" 'メッセージを表示
End Sub
作成した標準モジュールに、上のMacro3をコピペして、マクロを実行してみてください。
メッセージボックスで「7行目です。」と表示されるはずです。
では、サンプルコードについて解説していきます。
まず注意してほしいのが、先ほどのMacro2とは違って、「シートの最終行(1048576行目)」を変数を使わず直接Cellsプロパティで指定している点です。
「.Cells(.Rows.Count, 1)」の箇所ですね。
この方が、コードがシンプルでわかりやすいです。
シートの最終行を指定して上方向に移動(.End(xlUp))。
移動した先の行番号を「Row」プロパティを使って値を返しています。
返した値(行番号)を、Long型の変数LastRowに入れています。
そして、最後に変数LastRowの内容をメッセージボックスに表示させて終了です。
まとめ
表に関わるマクロを作成する場合、今回の処理(コード)はよく使います。
下の3つが重要なポイントです。
- 「End」プロパティ
- 「Rows.Count」プロパティ
- 「Row」プロパティ
これらをマスターすれば、表を作成する処理の効率化が図れるはずです。
Excelの面倒な処理は、マクロにやらせてしまいましょう。