Home » ExcelVBA Rangeオブジェクト » Endプロパティ » 最終行番号を取得する-空白セルが存在する場合

最終行番号を取得する-空白セルが存在する場合

対象:Excel2003, Excel2007, Excel2010, Excel2013

Excel VBAで、A列にデータが隙間なく入力されているときに「Range("A1").End(xlDown).Row」というコードで最終行の行番号を取得できることをご紹介しました。

このコードでは最終行を取得できないケースもあります。

Range("A1").End(xlDown)で最終行を表すRangeオブジェクトが取得できないケース

A列にデータが隙間なく入力されていないときにはダメなのです。

例えば、
100行目まで存在している表でも、A10セルまでデータが入力されていて、もしも、A11セルが空白セルだったときに 
 Range("A1").End(xlDown).Row
というコードを実行したときには、空白のA11セルの一つ上のセルの行番号「10」が取得されてしまいます。

A10セルまではデータが入力されていて、A11セルが空白セルだったときにA1セルをアクティブにしておいて[Ctrl]+[↓]キーを押せば、A10セルがアクティブになります。

このA10セルの10行目の10が
 Range("A1").End(xlDown).Row
で返されたわけです。

[スポンサードリンク]

空白セルがあるときに最終行番号を取得するサンプルコード

このような空白セルを作らないように表を作っておくのが本筋ですが、実務でExcelを利用する場合は、こんな空白セルの含まれた表が作られてしまうことも、残念ながら、あります。

そんなときに最終行番号を取得するコードをご紹介しておきます。
▼最終行の行番号をメッセージボックスに表示するコード
※A列の最終行の行番号をメッセージボックスに表示する例
MsgBox Cells(Rows.Count, "A").End(xlUp).Row
 または
MsgBox Cells(Rows.Count, 1).End(xlUp).Row

前回ご紹介した
 Range("A1").End(xlDown).Row
の、
 Range("A1")
の部分が
 Cells(Rows.Count, "A")
 Cells(Rows.Count, 1)
になっています。

2003までのExcelの場合
 Range("A65536")
 Cells(65536, "A")
 Cells(65536, 1)
というコードで、A列の一番下のセルを取得できます。

2007以降のExcelの場合
 Range("A1048576")
 Cells(1048576, "A")
 Cells(1048576, 1)
というコードで、同じくA列の一番下のセルを取得できます。

Excel 2007から仕様が変更になっていて、2003以前か2007以降かで、ワークシートの行数は異なります。

これをどのバージョンでも対応できるように汎用的にしたのが
 Cells(Rows.Count, "A")
 Cells(Rows.Count, 1)
です。

Rows.Countというのが最大行数を取得するオブジェクト式で、これをCellsプロパティの第1引数に指定しています。

途中に空白セルが存在しているときにも、
A列の最終行のセルを選択したいのなら
 Cells(Rows.Count, 1).End(xlUp).Select
または、
 Cells(Rows.Count, "A").End(xlUp).Select
A列の一番下のセルの、行番号を取得するのなら
 Cells(Rows.Count, 1).End(xlUp).Row
または、
 Cells(Rows.Count, "A").End(xlUp).Row
です。

前回ご紹介した
 Range("A1").End(xlDown).Row
ではA1セルから下方向にデータの途切れているセルを探すのでEndプロパティの引数がxlDownでしたが、今回の
 Cells(Rows.Count, "A").End(xlUp)
 Cells(Rows.Count, 1).End(xlUp)
ではA列の一番したのセルから上方向に探すのでEndプロパティの引数がxlUpになっています。

今回ご紹介した最終行のセルを取得する
 Cells(Rows.Count, "A").End(xlUp)
 Cells(Rows.Count, 1).End(xlUp)
というコードは、Excelでマクロを作るときの定番のコードの一つです。

Cells(Rows.Count, "A").End(xlUp)の注意点

ただし、
このコードで、いつでも、絶対に、間違いなく、必ず最終行が取得できると考えるのは、問題があります。

そもそも、
一番下のセルから上方向にデータの存在しているセルを探すのは、A列に空白のセルが存在している可能性があるからでした。

ということは、
一番下のセルが空白セルとなっている可能性だってあるはずです。

ここでご紹介した
 Cells(Rows.Count, "A").End(xlUp)
 Cells(Rows.Count, 1).End(xlUp)
というコードで最終行を取得できる可能性はかなり高いですが、この一番下のセルが空白になっている可能性は意識しておく必要があります。

結局、空白セルを作らないような表を作る業務ルールを、徹底して運用するのが一番です。

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » Endプロパティ » 最終行番号を取得する-空白セルが存在する場合

Copyright © インストラクターのネタ帳 All Rights Reserved.

.