Excel

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

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


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

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

キー操作の[Ctrl] + [↓]を押した場合と同じ動作です。
上記のキー操作をマクロ記録で録っても同じコードが出力されます。

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

Sub Sample01()
Dim lngRow As Long

'開始位置を選択
Range("a1").Select
Selection.End(xlDown).Select

'行番号を表示
MsgBox Selection.Row

End Sub

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

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

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

サンプル表

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

Sub Sample02()
Dim lngRow As Long, rng As Range

Range("a1").Select

'選択されたセルがExcelの最終行になるまでループ
Do Until Selection.Row = "1048576"
   lngRow = Selection.Row
   Set rng = Selection
   
   Selection.End(xlDown).Select
Loop

'最終行を選択
rng.Select
MsgBox lngRow

End Sub

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

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

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

Excelの各バージョンと最大行数は以下のとおりです。
Excelのバージョン 最大行番号
Excel 2013 1048576
Excel 2010 1048576
Excel 2007 1048576
Excel 2003 65536
Excel 2002 65536
Excel 2000 65536
Excel 97 65536
Excel 95 65536

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

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

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

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

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

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

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

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

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

Range("a1").Select

Do Until Selection.Row = "1048576"
   lngRow = Selection.Row
   Set rng = Selection
   
   Selection.End(xlDown).Select
Loop

'ワークシートの最終行のデータ有無をチェック
If Len(Selection.Value) = 0 Then
    rng.Select
    MsgBox lngRow
Else
    MsgBox 1048576
End If

End Sub

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

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

ちょっとかっこ悪いですし、画面描画を止めることで処理速度を上げることができますので、"Sample03"に画面描画を止める処理を追加したサンプルプログラムです。
Sub Sample04()
Dim lngRow As Long, rng As Range

'画面描画を処理が終了するまで停止
Application.ScreenUpdating = False

Range("a1").Select

Do Until Selection.Row = "1048576"
   lngRow = Selection.Row
   Set rng = Selection
   
   Selection.End(xlDown).Select
Loop

If Len(Selection.Value) = 0 Then
    rng.Select
    MsgBox lngRow
Else
    MsgBox 1048576
End If

End Sub

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

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

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

ExcelのVBAを使用したセルの選択方法については、別の記事「Excel VBA:セルの最終行(最終セル)の取得方法やVBAを使用した色々なセルの範囲選択方法」でも紹介していますので参照してください。

スポンサードリンク

  

関連記事