Excel VBAでコードを書いていくときにシートの最終行を取得して
処理を行い時があると思います。
今回はシートの最終行を取得するコードについて書いていきます。
最終行を取得する場面としては
例えば、
1.csvファイルに対して、データの件数分繰り返し処理を行いたい場合
2.シート上の範囲を選択し、その範囲に対して処理を行いたい場合
等が挙げられると思います。
その他、最終行を取得したい方も参考にしていただけると幸いです。
さて、最終行を取得するコードですが、以下のようにコーディングすることで取得することが出来ます。
Cells(1, 1).End(xlDown).Row
ExcelのショートカットキーでいうとCtrl + ↓の操作と同じことをしています。
このコードではA列の先頭行から下へ向かって値の入っているセルの行数を取得するコードになっています。
このコードは一点気を付けなければいけないことがあります。
上から下へ向かって行数を数えるため、途中に空白行があった場合は
その空白行の上のセルを最終行として認識してしまいます。
※上記のケースだとA列の最終行は5行目となってしまいます。
そのため私は以下の方法で最終行を取得することがほとんどです。
Cells(Rows.Count, 1).End(xlUp).Row
この方法が先ほどのコードと違う点は、シートの最終行から上へ向かって、値が入っているセルを探すという方法です。
こちらはExcelのショートカットキーでいうとCtrl + ↑の操作と同じことをしています。
そのため、途中に空白行があったとしてもA列の一番下の行数を取得することが出来ます。
個人的には先ほども書きましたが、こちらの方を常に使用するくらいお勧めします。
さて、最終行の取得について、ダラダラと書いていきましたが、ここまで読んでくれた方の中には
最終行だけではなく、最終列の取得についても知りたいと思っている方もいると思います。
同じように最終列を取得する方法はあります。
Cells(1, 1).End(xlToRight).Column
そしてこちらも最終行取得の際と同じように先頭列からカウントしていくのか最終列の二通りがあります。
上記のものは先頭列から取得する方法になります。
そして最終列からカウントしていくコードは以下のようになっています。
Cells(1, Columns.Count).End(xlToLeft).Column
原理は同じです。
ただ、最終列の取得に関しては、どちらの方法を採るのかは場合によって使い分けています。
その理由は最終列の取得をするケースとしては、
特定の列を一行分コピーして別シートへ転記をするようなことが多いです。
このような場合だとだいたいのケースがA列にヘッダー情報が入っている場合が多いです。
(CSVファイル等)
そのため、先頭列から右へ向かって最終列のカウントしたとしてもA列はヘッダー部なので
空白であることが考えにくいです。
であれば、先頭列からカウントして問題ないです。
このように最終列の取得に関しては場合によって分けています。
ちなみに、余談ですが、エクセルのシートの最終行と最終列は以下のようになっています。
最終行:1048576行
最終列:XFD列
ExcelVBAは、同じことをするにしても色々なコーディングがあり、
書き方によって数分かかるものも少しの工夫で数秒で終わるようにコーディングできます。
最終列・最終列の取得もなるべく先頭からカウントすることで処理にかかる時間を僅かですが、抑えることが出来ます。
ただ、最終行の取得に関して一番下から上へ向かって取得することをお勧めします・・・
(三度目の主張)