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)で左方向に探し、空白から入力に切り替わったセルの列番号を返します。