Excel

【Excel VBA】最終行を取得する方法!空白を含むデータにも対応

こんばんは。

nanana-blog管理人のナナナです。

ブログを訪問し記事を読んでいただきありがとうございます。

ExcelのVBAを使用していると最終行を取得したい場面があります。

UsedRangeプロパティを使用すると、最終行を取得することができます。

しかしUsedRangeだけでは、空白セルを含むデータの最終行を取得することが出来ません。

本日は空白セルを含んだデータでも最終行を取得することが出来るVBAの書き方を紹介します。

空白セルを含むデータの最終行を調べる方法

Endプロパティを使用する

Excelシート

ワークシートの最終行から上に向かって値の入力されているセルへ移動します。

画像のような7行目に空白がある場合、上から下へ移動すると6行目が最終行と認識されてしまいますが、下から上へ移動すると8行目が最終行になります。

Sub ボタン1_Click()
Dim MaxRow As Double
Dim MaxRowNumber As Double
MaxRow = Rows.Count
MaxRowNumber = Cells(MaxRow, 1).End(xlUp).Row
MsgBox MaxRowNumber
End Sub

解説

MaxRow = Rows.Count

Row.Countでワークシートの最終行を取得して変数MaxRowへ格納します。

ちなみにExcel2003の最終行は「65,536行」で、現時点で最新バージョンのExcel2019の最終行は「1,048,576行」です。

MaxRowNumber = Cells(MaxRow, 1).End(xlUp).Row

Cell(MaxRow, 1)でA列の1,048,576行目を表しています。

Endプロパティの「xlUp」を使って上方向へ移動して、移動先の行数を変数MaxRowNumberへ格納しています。

他にも下方向への移動や左や右への移動を指定することができます。

定数 内容
xlUp 上方向への移動
xlDown 下方向への移動
xlToLeft 左方向への移動
xlToRight 右方法への移動

このVBAを起動するとメッセージボックスには「8」と表示されます。

Excel VBA 処理結果

UsedRangeプロパティを使用する

Excelワークシート

Sub ボタン1_Click()
Dim MaxRow As Double
Dim MaxColumn As Double
MaxRow = Worksheets("Sheet1").UsedRange.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
MaxColumn = Worksheets("Sheet1").UsedRange.Find("*", , xlFormulas, , xlByColumns, xlPrevious).Column
MsgBox MaxRow
MsgBox MaxColumn
End Sub

解説

UsedRangeは非表示のセルや、セル内に値はなくても罫線が引かれていたりするセルも対象になります。

そのためUsedRangeで取得したRangeからFindプロパティを使って、最終行を探します。

まず「Worksheets("Sheet1").UsedRange」でSheet1のデータがあるセル範囲を取得します。

そしてFindプロパティを使用してUserdRangeで取得した範囲から最終行を取得していきます。

引数の1番目で「*」を使用して、値の入力されている全てのセルを対象にしています。

値が入力されているセルなので、罫線などの書式のみのセルは対象外になります。

引数の5番目で「xlByRows」を指定して検索方向を縦(列)に指定します。

検索方向を横(行)にしたい場合は「xlByColumns」を指定します。

引数6の番目で「xlprevious」を指定して検索値の最終セルを取得します。

このVBAを実行すると最初に「8」その後に「6」とメッセージが表示されます。

Excelワークシート

Excelワークシート

最後に

いかがだったでしょうか。

本日はExcelVBA最終行を取得する方法を紹介しました。

For文を使用して繰り返し処理をする場合などデータの最終行を使用することはあります。

今回掲載しているVBAはコピペをして使用できるので、ぜひ使用してください。

www.nanana-blog.com

www.nanana-blog.com

www.nanana-blog.com

www.nanana-blog.com