【Excel VBA】最終行・最終列の取得
- 2020.08.11
- 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での自動化や省力化に関するお問い合わせはこちらからお待ちしております。
LancersやMENTAでも活動していますので、そちらからお仕事を依頼して頂けます。
- 前の記事
【Excel VBA】セルのコピー 2020.08.07
- 次の記事
【Excel VBA】文字列の切り取り 2020.08.12