Excel VBA:行の途中に空白セルがあっても表の最終行のセルの選択や行番号を取得するVBAののサンプルプログラム

Excel

行の途中に空白行がある場合でも表の最終行の行番号の取得と最終行のセルの選択を行う方法を覚書。

行の間に空白セルがない場合はとても簡単だけれど、空白行が含まれる場合はちょっと工夫が必要になります。

値が連続している場合の最終行の選択と行番号の取得

空白行が含まれていない場合の最終行の選択と行番号の取得方法のサンプルです。

キー操作の[Ctrl] + [↓]を押した場合と同じ動作です。

上記のキー操作をマクロ記録で録っても同じコードが出力されます。

基本VBAサンプルプログラム

空白セルがなく、連続してデータが入力されていることが保証されている場合は上記のプログラムで十分ですが、空白セルがある場合はもう少し工夫が必要です。

行の途中に空白セルがあっても最終行を取得、選択するVBAのサンプルプログラム

例えば以下のアンケート結果の集計表のように、途中に空白セル(アンケート対象者が無回答だった)や空行が含まれる場合はそれを考慮した処理が必要になります。

サンプル表

空白セルや空行を考慮したVBAのサンプルプログラム

上記サンプルプログラムの”1048576″ は、Excelの最終行番号を表しています。

Excelのバージョンによっては最終行番号が異なりますので、以下の表を参考に使用しているバージョンに合わせた値に変更して下さい。

Excelの各バージョンと最大行数

Excelの各バージョンと最大行数は以下のとおりです。

Excelのバージョン最大行番号
Excel 20131048576
Excel 20101048576
Excel 20071048576
Excel 200365536
Excel 200265536
Excel 200065536
Excel 9765536
Excel 9565536

サンプルプログラムのポイント

上記サンプルプログラムのポイントとしては、最終行に到達するまで”Selection.End(xlDown).Select”を繰り返し実行させ、最終行にたどり着く1つ前に”Selection.End(xlDown).Select”で選択されたセルが表の最終行という判断をさせている点です。

実際にキー操作で行ってみるとわかりやすいのですが、”Selection.End(xlDown).Select”は、最初に見つかった空白セルの手前のセルを選択します。

サンプルの表のように途中で空白セルが含まれるとその手前のセルで止まってしまうため、最終行までたどり着きません。

A1セルを選択した状態で”Selection.End(xlDown).Select”を繰り返すと、表の最終行を選択した後は、ワークシートの最終行である”A1048576″が選択されます。

つまりワークシートの最終行を選択する直前に選択したセルが表の最後の行であることを示しています。

もちろんこの表のA列に余計なデータ、例えば表の説明をする文章などが入っていたりするとこの法則は崩れてしまうので注意が必要です。

最終行までデータが入っていた場合を考慮に入れたVBAのサンプルプログラム

可能性としてほとんどないとは思いますが、もしExcelの最終行までデータがびっしり入っていた場合を考慮するのであれば、サンプルプログラム”Sample02″を少し変更する必要があります。

セルを選択する際の画面描画を止める処理を追加したVBAのサンプルプログラム

サンプルプログラムを実行するとわかると思いますが、セルを選択する処理が繰り返し実行されるため、そのたびに画面がスクロールします。

ちょっとかっこ悪いですし、画面描画を止めることで処理速度を上げることができますので、”Sample03″に画面描画を止める処理を追加したサンプルプログラムです。

表の最終行のセルの選択や行番号を取得するVBAののサンプルプログラムまとめ

データが入ってる列の最後のデータが入力されているセルの選択には、”Selection.End(xlDown).Select”が使用できますが、表の途中で空白セルや空行が入っていると”Selection.End(xlDown).Select”では間違った場所を最後の行として選択してしまいます。

そういった場合でも対応できるようなVBAのサンプルプログラムを紹介しました。

ExcelのVBAを使用したセルの選択方法については、以下の記事でも紹介していますので参照してください。

Excel VBAを使用した色々なセルの範囲選択方法を覚書。 セルの最終行や最終セルのアドレスの取得、アクティブセル範囲(空白行で囲ま...