VBAで最終行を取得する
プログラミングをしていると最終行の取得は頻繁に出てきます。
最終行の取得は定石がありますので、丸覚えすればOKです。
Dim lastRow As Long
lastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
ActiveSheet に関しては現在のシートを対象にしているという意味なので、別シートの最終行を得たい場合は適宜変更します。
また 1 となっている部分は、1列目(A列)の意味しています。上の例では1行目の最終行を取得しています。
使用する場合は、この数値を変更して取得したい列番号にしておきます。
普段Cellsで使うように “A” という書き方でもOKです。
少々、覚えずらいのが難点です。当サイトでは「備忘録」ページによく使うが覚えずらいコードをまとめていますので必要になったら参照してください。
プログラム解説
Cells(Rows.Count, 1).End(xlUp).Row
プログラムコードを分解して説明します。
Rows.Count
シート指定の後、Cells(Rows.Count, 1) に関しては通常のセル番地の指定になります。
行番号の Rows.Count は、Excelシートの最大行数を指しています。
これはExcelのバージョンによって数は異なります。

Excel2019では、以下のように 1048576 になりました。ただ数値が重要なのではなくシートの最終行を得たいだけです。
Endプロパティ
End(xlUp)のEndプロパティは、引数方向への終端のセルを返します。
Endプロパティの引数には以下の4つがあります。
引 数 | 方 向 |
---|---|
xlUp | 上 |
xlDown | 下 |
xlToRight | 右 |
xlToLeft | 左 |
Rowプロパティ
最後の Row はそのセルの行番地なので数値を返します。
最終的な動作確認
上記をまとめて意味を考えると以下のようになります。
Cells(Rows.Count, 1).End(xlUp).Row
シートの一番下のセルから、上方向の終端のセルの行番地

特徴としては、途中に空白があっても下から跳ね上がって探索するので真の最終行が得られることになります。
逆に、途中の空白の手前を得たいという事であれば、以下のようにします。

Cells(2, 1).End(xlDown).Row
この場合は、開始セル(A2)から、下方向で値のある終端の行という意味になります。
まとめ
最終行の取得は非常によく使います。
一旦、理屈を確認したらあとは丸覚えで使用すれば問題ないと思います。
ただし、使い方として、シート指定と列指定に注意するようにしましょう。
ちなみに最終列の取得も同じような考え方で取得できます。
'1行目の最終列の取得
Dim lastCol As Long
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
「備忘録」ページにも掲載していますので必要になったらご参照ください。
コメント