【VBA】最終行を取得する方法【値・行数&空白がある場合の解決策まで解説】

VBA

VBAでの『エクセルのワークシートの最終行の値・行数の取得』はとても頻繁に使われるテクニックです。

 

「ワークシートにある表の全ての値を取得したい」ときなどでは、必ず必要になる技術です。

そんなVBAでは必須レベルの「ワークシートの最終行の値・行数の取得の方法」を、簡単なのでぜひ覚えていってください。

 

ちなみに最終列を求める場合は『最終列を取得する方法』を読んでみてください。

スポンサーリンク



入力データの最終行を取得する方法

ここでは「Endプロパティ」を使って最終行を取得していきます。

そして、ここで使う表は下の通りです。

 

では、さっそく最終行を調べてみます。

【欠点あり】End(xlDown)で最終行を取得する

下のコードで最終行を取得することができます。

 

上のコードではEndプロパティの引数になっている「xlDown」を入れています。

このxlDownとはCtrlキー + ↓を押したときと同等の動きをします。

つまり、上のRange(“B2”).End(xlDown)セルB2を選択した状態でCtrlキー + ↓を押したときの値を取得するということになります。

 

そして、上の表と同じモノを作り、上の動作を行うと「.End(xlDown)」の欠点に気づけます。

その欠点は下の結果を見てもらうと分かります。

値では「6行目」、最終行の行数は「8」となっています。

つまり、「End(xlDown)」では”空白”があると、その地点を最終行とみなしてしまうわけです。

 

なので、ここで紹介した最終行の取得は”必ずデータが連続して入力される”時だけ使うようにしましょう。

補足Range(“B2”).End(xlDown).Rowは…。

×:セルB2から何行目が最終行か

〇:セルB2を選択した状態で「Ctrlキー + ↓」を押したときに選択されるセルはB列上で何行目か

 

一番下から最終行を取得する

下のコードで上の欠点を解消した、最も使われる最終行を取得の仕方になります。

 

上のコードではEndプロパティの引数になっている「xlUp」を入れています。

この「xlUp」とはCtrlキー + ↑を押したときと同等の動きをします。

 

加えて、『Cellsプロパティ』の第一引数に「Rows.Count」を記述することでシート上の最終行まで移動し選択しています。

※Cells(行数, 列数)です。

 

つまり、上の『Cells(Rows.Count, 2).End(xlUp)』B列の一番下のセルを選択した状態でCtrlキー + ↑を押したときの値を取得するということになります。

 

なので、上で紹介したコードの”空白のセルを最終行として認識することはない”ということです。

※下から最も近いデータの入ったセルを最終行として認識するから。

 

ちなみに上のコードを実行すると下のような結果が得られます。

 

最終行の値も行数もあっていますね。

スポンサーリンク

コメント