【Excel VBA】最終行のセル位置を取得するには?

最終行のセル位置の取得をするにはどうすれば良いのでしょうか?

ケース(例)

・例えば、A列のセルにデータが入っている。このA列に入っているデータの最終行の位置を取得したい。
・行の途中データが入っていないセルがあるが、その空白行は無視して最終行を取得したい。

サンプルデータ

検証用に下のデータを用意しました。

サンプルデータ

データは、

・A列に、1行目から23行目までデータが入力されている。
・ただし、7行目と18行目は空白。

以上のデータから、最終行が23行目であることを知りたい。

ソースコード(サンプル)

空白行は無視して最終行を取得するには次のソースコードは次の通りです。(コピペですぐ使えます)

 
'最終行をメッセージ出力する。
MsgBox Cells(Rows.Count, 1).End(xlUp).Row

実行結果

23

最終行である「23」の値がメッセージ出力されていることが確認できました(取得できました)。

出力結果

A列にある空白の7行目と18行目は無視して23行目が最終行であることを正常に取得することができました。

ソースコードの解説

使用しているソースコードは1行だけです。

ポイントは、Cellsの使い方です。なお、Cellsとは、WorksheetオブジェクトまたはRangeオブジェクトのプロパティのことです。

Cellsには「行インデックス」と「列インデックス」を指定しているところが重要です。

サンプルで使用したコードでは、行インデックスが「Rows.Count」(全行数)、列インデックスが「1」(1列目・・・A列のこと。C列を調べたいなら3を指定する)を指定しています。

また、サンプルソースコードで指定しているEndプロパティは最終行を取得するために使用しており、「xlUp」は「上方向への移動」を指定する値であり、指定した行インデックスから見て上方向に値が入っているかどうか判定します。最終行を特定するのに、

①指定された行インデックスを特定する。
② ①で取得した行から上方向を見て値が入っている行まで検索する。

①、②の流れでデータの入っている最終行を特定している、と言うわけです。なので、データの途中で空白のデータがあっても関係なくデータが入っている最終行が特定できるというわけなんですね。

項目
詳細
ソースコード
Cells(Rows.Count, 1).End(xlUp).Row
Cellsの第1パラメータ(行インデックス)
調べたい行数。(サンプルでは、Excel内の全行を対象に調べたいので「Rows.Count」(全行数)を指定している)
Cellsの第2パラメータ(列インデックス)
調べたい列(サンプルでは1列目(A列)。C列なら3を指定する)
Endプロパティの設定値
指定された行インデックスから上方向にあるデータの行位置を特定(参照)する

サンプル(Excelファイル)

今回使用したソースコードが実装されているExcelファイルは下のリンクからダウンロードすることができます。

⇒サンプルExelファイル

※ちなみに、拡張子は「.xlsm」です。