【VBA】最終行・最終列を取得する

VBAでよく使う、「最後の行」「最後の列」を見つける方法 です。

目次

ワークシートの最大行・最大列を取得する
最終セルを下方向・右方向へ探していく
最後まで行ってから戻ってきて最後を探す

ワークシートの最大行・最大列を取得する

 y = Rows.Count
 x = Columns.Count

この方法を単独で用いることは少ないかもしれませんが、
ワークシートの「表示できる最大の行数・列数」を返してくれる方法です。

Rowsはワークシートの行全体をあらわすものオブジェクトで、Countメソッドはその数を表します。
同様に、Columnsはワークシートの列全体をあらわすものオブジェクトで、Countメソッドはその数を表します。

Excelで表示できる最大行・列の数はExcelのバージョンに依存するため、返ってくる値もバージョンによって異なります。
Excel2007以降では、最大行数は1,048,576、最大列数は16,384です。

▲目次に戻る

最終セルを下方向・右方向へ探していく

 y = Range(“A1”).End(xlDown).Row
 x = Range(“A1”).End(xlToRight).Column

これは、Excelシートで「A1」セルを選択した後に「Ctrl + ↓」または「Ctrl + →」を押したのと同じような動作で、連続した最終セルの行・列を取得します。

この「連続した」というのが曲者で、間に空白セルがあるとその手前のセルを「最後」と認識します。
また、空白セルから探した場合は入力セルの手前のセルを「最後」と認識します。

ですので、最終行・列を取得したい場合、連続して入力されたデータでないとこの方法は使えません。

ただし、入力/空白の切り替わる場所を探したい場合には、逆にこの方法が有効な方法になります。

▲目次に戻る

最後まで行ってから戻ってきて最後を探す

 y = Cells(Rows.Count, 〇 ).End(xlUp).Row
 x = Cells( 〇 , Columns.Count).End(xlToLeft).Column

前の項での問題を解決するための方法で、それぞれ「〇列における一番下の入力セルの行番号」「〇行における一番右の入力セルの列番号」を返してくれます。

最初の項で示したように、Rows.CountはExcelで表示できる最大の行数を表すので、Cells(Rows.Count, 〇 )は「〇列でExcelの最大行のセル」を表します。
一旦Excelの最大行のセルまで行ってから、End(xlUp) で上方向に行って、空白から入力に切り替わるセルを見つけ、Rowでその行数を返してくるわけです。

列についても同様です。最大列のセルまで行ってから、End(xlToLeft)で左方向に探し、空白から入力に切り替わったセルの列番号を返します。

▲目次に戻る