Excel(エクセル)のVBAでRows.CountとEnd(XlUp)で最終行を探す

こんにちは、タケイチです。

最終行取得は、最終着地ではなくて始めるためにまずはやっておきますか!というくらいのコードです。

普段エクセルで処理しているのをVBAで短縮したい!と思ったものの大半に使われるのが最終行の取得です。

最終行の値を取得したり、最終行の次の行の行番号を取得して書き込んでみたりと、頻出頻度の高いコードです。

基本コードとなると理解して、しっかりと覚えておいた方が良いと思います。プログラミングをしていると頻出頻度が多すぎて最終的には手が勝手に覚えますので、それまでの辛抱だと思ってお付き合いください。

早速ですが最終行を取得したいなら、「シート名.Cells(Rows.count,該当の列).End(XlUp).Row」が基本コードになります。

僕の基本コードをお伝えして、使い方の参考を示せればと思います。

 

僕が一番使いやすい最終行の算出コード

シート名.Cells(Rows.Count,該当の列).End(XlUp).Row

このコードをまだ見たことがない人は、Rows.CountEndの部分でどんな返り値があるのかがイメージできないと思いますので、各々で説明していきたいと思います。

Rows.Countの解説

Rows.Countとは、一番下まで行ってくれ!という命令です。

なので、エクセルの一番下の行までズン!と進んでくれると思ってください。

End()の解説

Endは、カッコの中に入るワードによって処理が変化しますが、今回はXlUpです。

XlUpは簡単に言うとCtrl + ↑のコマンドを押した状態です。

得られる結果

シート名.Cells(Rows.Count,該当の列).End(XlUp).Row

で得られる結果は?

任意のシート名にある該当列の一番下でCtlr + ↑を押して一番最初に入力されている行数を返してくれます。

参考コード

プラスワン!最終行の値を取得するコード

今まで話していたのは、最終行を取得する。行番号を取得する話でしたが、最終行の値を取得するコードは上記のコードを使用すると良いでしょう。

.Rowにすると、行番号で取得することができます。.Valueにすると、値で取得することができます。

最終行を出すうえで、今の方法に落ち着いたのは何故?

空白は無視できなかった!最終行が算出できなかった

僕は手作業で最終行に進むとき、開始行でCtrl + ↓を押して最終行へ行くようにしていました。

しかし、Ctrl + ↓は空白があるとそこで止まってしまうという弱点があります。

この事態を防ぐために、Rows.Countで一番下まで一度行ってから、End(XlUp)の方法でCtrl+↑で途中の空白を関係なく最終行の調査ができている。

肝はRows.Count

最初にも書いたように、シート名.Cells(Rows.count,該当の列).End(XlUp).Rowが最終行を指示していますが、なぜ、「シート名.Cells(先頭行,該当の列).End(XlDown).Row」にしないのか?

該当の行を一番下から上にあげるパターン。と先頭行にしてから連続した文字の一番下に下げるということです。

例題1)最終行を使った調査

最終行を使った調査のコード

今回のコード

例題2)最終行を使った追加

今回のコード