ITサポーターTsuchida

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章で一通り終わりです。変数の使い方・条件分岐・ループ処理・最終行の取得ができれば、かなり多くの定型業務が自動化できるようになります。どうぞ実務にお役立てください。