VBA Basic12
第12章 最終行・最終列の取得
第10章のFor Nextステートメントがわかったとしても、シートの最終行がわからないとループ処理が役に立ちません。ループ処理を有効に機能させるために、データの最終行または最終列の取得する必要があります。
Excelでは連続したデータの最後の行や最後の列を取得できます。その最終行の行番号や最終列の列番号でループ処理が自由にできるようになります。
通常Excelを操作するうえでデータの最終行に移動するときに、[Ctrl]+[↓]キーを使います。 セルA1から最終行までデータが連続している場合は、[Ctrl]+[↓]キーの操作で問題ありません。 これをVBAで記述すると以下のとおりになります。
Cells(1, 1).End(xlDown)
この操作は連続しているデータの際ということで、途中に途切れる行があると途切れた行の後ろには移動しません。
途切れた行の後ろにも行があるときにも最終行を見つける場合は、Excelの最大行から[Ctrl]+[↑]に移動すると考えます。この操作をVBAで記述すると以下のとおりになります。
Cells(Rows.Count, 1).End(xlUp)
ここまでは最終行を見つけるだけで、最終行は何行目かを取得しているわけではありません。
最終行数の取得には、移動した最終行の行数を取得します。取得方法は以下のとおりです。
Cells(1, 1).End(xlDown).Row
Cells(Rows.Count, 1).End(xlUp).Row
最終行に移動したセルの行は、後ろにRowつけるだけです。
ちなみに最終行の取得はどちらが望ましいかはケースバイケースです。 途切れた行の後ろが不要であれば前者で、途切れた行の後ろも必要であれば後者になります。どちらにするかはデータの内容によって判断します。
最終列の取得方法 最終行の取得と全く同じ考え方です。
途切れた列以降が不要の場合
Cells(1, 1).End(xlToRight).Column
途切れた列以降が必要であれば
Cells(1, Columns.Count).End(xlToLeft).Column
以上で最終行と最終列の取得方法となります。
最終行を取得してどう使うか、ループ処理と組み合わせてみます。
Dim i As Long
For i = 1 To Cells(1, 1).End(xlDown).Row
Cells(i, 3).Value = Cells(i, 1).Value * Cells(i, 2).Value
Next
最終行数が、ループ処理の終了値として使えます。最終行の取得方法は理屈というより、知識として覚えておいた方がよいです。
Excel VBAの基礎は第12章で一通り終わりです。変数の使い方・条件分岐・ループ処理・最終行の取得ができれば、かなり多くの定型業務が自動化できるようになります。どうぞ実務にお役立てください。