【Excel VBA】最終行・最終列の取得

【Excel VBA】最終行・最終列の取得

Excel VBAで処理を行う場合、行数や列数が固定出ない表を処理対象とすることが多々あります。
そういった場合に有効な方法が最終行や最終列を取得する方法です。
今回はExcel VBAで最終列や最終行をどのように取得する方法を紹介します。

最終行を求める方法

最終行を求める方法は2つあります。
1つ目は開始行から求める方法、2つ目はエクセル自体の最大行から求める方法です。

開始行から求める方法

まずは構文とその結果を見てみましょう。

Cells(1, 1).End(xlDown).Row

最終行の取得①

上記はA1セル(1行1列目)を基準に「Ctrl」+「↓」でセルを移動する処理と同じになります。
結果としてA6セルの「Row」プロパティを取得するので、得られる結果は「6」となります。

この際の注意点は上記のようにA7セルで途切れているので、A6セルが対象セルとなってしまうことです。

では、A9セルの行番号である9を取得するにはどうしたらよいでしょうか?
それを「エクセル自体の最大行から求める方法」で紹介します。

エクセル自体の最大行から求める方法

次に紹介する方法は「Ctrl」+「↑」でセル移動する方法と同じです。
この時の基点となるセルの求め方がポイントになります。

Cells(Rows.Count, 1).End(XlUp).Row

最終行の取得②

Rows.Count」はExcelの最大行番号を返す定数となっています。
Excel 2007以降では1,048,576となります。

つまり、1,048,576行1列目を基点として「Ctrl」+「↑」でセル移動する処理と同じ結果が得られます。

最終列を求める方法

「最終行を求める方法」を応用して最終列を求めることも可能です。
最終列を求める方法も最終行を求める方法と同じく2通りあります。
1つ目は開始列から求める方法、2つ目はエクセル自体の最大列から求める方法です。

開始列から求める方法

「開始行から求める方法」の応用です。
では、コードと結果を見てみましょう。

Cells(1, 1).End(xlToRight).Column

最終列の取得①

上記はA1セル(1行1列目)を基準に「Ctrl」+「→」でセルを移動する処理と同じになります。
結果としてC1セルの「Column」プロパティを取得するので、得られる結果は「3」となります。

注意点は最終行を求める方法①と同じようにD1セルで途切れているので、C1セルが対象セルとなってしまうことです。

では、F1セルの列番号である6を取得するにはどうしたらよいでしょうか?
それを「エクセル自体の最大列から求める方法」で紹介します。

エクセル自体の最大列から求める方法

次に紹介する方法は「エクセル自体の最大行から求める方法」の応用で、「Ctrl」+「←」でセル移動する方法と同じです。
この時の基点となるセルの求め方がポイントになります。

Cells(1, Columns.Count).End(xlToLeft).Column

最終列の取得②

Columns.Count」はExcelの最大列番号を返す定数となっています。
Excel 2007以降では16,384となります。

つまり、1行16,384列目を基点として「Ctrl」+「←」でセル移動する処理と同じ結果が得られます。

注意点

Endプロパティを使用しての最終行や最終列の取得方法は簡単な反面、制約が多いです。
特に今回の記事内で扱った例でD1セルを基点として最終行を求めようとするとエクセル自体の最終行までカーソルが飛んでいくイメージになります。
それぞれがどのような処理になっているかを把握して利用する必要がありますね。

まとめ

今回は「最終行や最終列を求める方法」を紹介しました。
ケース・バイ・ケースで使い分ける必要がありますね。

基点の決め方

A1セルCells(1, 1)
エクセル自体の最大行Cells(Rows.Count, n)
エクセル自体の最終列Cells(n, Columns.Count)

「Ctrl」+「矢印」キーでのセル選択

「Ctrl」+「↓」Cells(row, col).End(XlDown)
「Ctrl」+「↑」Cells(row, col).End(XlUp)
「Ctrl」+「→」Cells(row, col).End(XlToRight)
「Ctrl」+「←」Cells(row, col).End(XlToLeft)

Excel VBAで最終行や最終列を求めるのはとてもよく使うので、文法として丸暗記してもいいかもですね。

では、Excel VBAを使用した自動化ライフを楽しみましょう♪

Excelでの自動化や省力化に関するお問い合わせはこちらからお待ちしております。
LancersMENTAでも活動していますので、そちらからお仕事を依頼して頂けます。