今回は最終行と最終列の取得方法をご説明します。
プログラムを書く上で非常に使用頻度が高いと思います。
動的な処理を組み込むには必須のコードとなりますので、暗記しても良いくらいの内容です。
取得方法はいくつか方法がありますので、順番にご説明します。
ぜひ覚えてみてください。
その他のセルの操作は下記記事をご覧ください。
1.最終行・最終列の取得方法
基本的にExcelショートカットの「Ctrl+テンキー(下)」、「 Ctrl+テンキー(上) 」、
「 Ctrl+テンキー(右) 」、 「 Ctrl+テンキー(左) 」をVBAで再現している感じです。
変数に格納する場合は、「Long(数値型)」がいいと思います。
主な取得方法は以下の通りです。
- 下方向に最終行を取得する
- 上方向に最終行を取得する
- 右方向に最終列を取得する
- 左方向に最終行を取得する
- 使用済みセルから最終行・最終列を取得する
この5パターンを覚えておくと大抵の作業には対応可能ではないかと思います。
ですが、どれも完璧ではないので、ご自身の環境で一工夫しながらご使用ください。
2.最終行の取得
下方向に最終行を取得
Excelショートカットの「Ctrl+テンキー(下)」 と同じです。
MaxRow = Range("A1").End(xlDown).Row
もしくは
MaxRow = Cells(1,1).End(xlDown).Row
の様に記載します。
「Range(“A1”)」のAや、「Cells(1,1)」の(1,1)の赤い方を変更すると取得する列を変更できます。
このコードは途中に空白があると、そこで停止してしまい、最終行取得に失敗します。
上方向に最終行を取得
Excelショートカットの「Ctrl+テンキー(上)」 と同じです。
MaxRow = Range("A1048576").End(xlUp).Row
もしくは
MaxRow = Cells(Rows.Count, 1).End(xlUp).Row
の様に記載します。
「Range(“A1”)」のAや、「Cells(1,1)」の(1,1)の赤い方を変更すると取得する列を変更できます。
このコードは途中にデータの入力されたセルがあると、そこで停止してしまい、最終行取得に失敗します。
また、Rangeの書き方はExcelのバージョンによって、最終行が変わった場合にエラーが発生する可能性がありますので、Cellsの書き方をおすすめします。
3.最終列を取得
右方向に最終列を取得
Excelショートカットの「Ctrl+テンキー(右)」 と同じです。
MaxCol = Range("A1").End(xlToRight).Column
もしくは
MaxCol = Cells(1,1).End(xlToRight).Column
と記載します。
「Range(“A1”)」の1の部分や、「Cells(1,1)」の(1,1)の赤い方を変更すると取得する行を変更できます。
こちらも同様に、途中に空白があるとそこで停止してしまい、最終列取得に失敗します。
左へ最終列を取得
Excelショートカットの「Ctrl+テンキー(左)」 と同じです。
MaxCol = Range("XFD1").End(xlToLeft).Column
もしくは
MaxCol = Cells(1, Columns.Count).End(xlToLeft).Column
と記載します。
「Range(“A1”)」の1の部分や、「Cells(1,1)」の(1,1)の赤い方をを変更すると取得する行を変更できます。
こちらも同様に、 途中にデータの入力されたセルがあると、そこで停止してしまい、最終列取得に失敗します。
また、Rangeの書き方はExcelのバージョンによって、最終列が変わった場合にエラーが発生する可能性がありますので、Cellsの書き方をおすすめします。
4.使用されているセルから最終行と列を取得
上でご紹介した4種類の最終行、最終列の取得とは少し違います。
使用されているセルの範囲を取得して、その最終行と列を取得します。
使用されているセルの範囲は「UsedRangeプロパティ」で取得出来ます。
ここでも注意が必要で、罫線などデータ以外で使用していても、範囲に含まれます。
また、非表示の行列やオートフィルタで隠れている範囲も含まれます。
MaxRow = UsedRange.Rows(.Rows.Count).Row
MaxCol = UsedRange.Columns(.Columns.Count).Column
こちらも、含まれる範囲を考えると確実にデータが入力されている最終行、最終列を取得出来るわけではありません。
5.まとめ
5つの最終行、最終列の取得パターンをご紹介しましたが、基本的にはCellsの方法で「上方向に最終行を取得」と「左へ最終列を取得」の列を便宜指定して、使用するのが一番使い勝手がいいと思います。