Home » エクセルマクロ・Excel VBAの使い方 » Rangeオブジェクト » 最終行番号を取得する-空白セルが存在する場合

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

対象:Excel2003, Excel2007, Excel2010, Excel2013

Excel VBA(Visual Basic for Applications)で、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 » エクセルマクロ・Excel VBAの使い方 » Rangeオブジェクト » 最終行番号を取得する-空白セルが存在する場合

[スポンサード リンク]
[スポンサード リンク]

TrackBack:7

TrackBack URL
最終列を取得するExcel VBAのコード from インストラクターのネタ帳
データの入力されている最終列を取得するExcel(エクセル)VBAのコードをご紹介しています。
条件に合致した行を削除するマクロ from インストラクターのネタ帳
ワイルドカードとOr演算子を使って条件を指定して、条件に合致した行を削除するExcel(エクセル)マクロをご紹介しています。
セル結合されているときに最終行番号を取得する from インストラクターのネタ帳
セルが結合されているときに最終行番号を取得するExcel(エクセル)VBAのコードをご紹介しています。
列幅・行の高さをコピーするExcelマクロ from インストラクターのネタ帳
行の高さ・列の幅を1枚目のワークシートに揃えるExcel(エクセル)マクロをご紹介しています。
最終行を取得するGASスクリプト from インストラクターのネタ帳
GoogleスプレッドシートのA列でデータの入力されている最終行番号を取得するGAS(Google Apps Script)をご紹介しています。
VBAで空白セルまでを選択する from インストラクターのネタ帳
対象:Excel2007, Excel2010, Excel2013, Win...
オートフィルターしたデータの見出し行以外をコピーするExcelマクロ from インストラクターのネタ帳
オートフィルターしたデータの、見出し行以外をコピーするExcel(エクセル)マクロをご紹介しています。

Home » エクセルマクロ・Excel VBAの使い方 » Rangeオブジェクト » 最終行番号を取得する-空白セルが存在する場合

「Rangeオブジェクト」の記事一覧

検索

最近じっくりと読まれている記事

.