こんばんは。
nanana-blog管理人のナナナです。
ブログを訪問し記事を読んでいただきありがとうございます。
ExcelのVBAを使用していると最終行を取得したい場面があります。
UsedRangeプロパティを使用すると、最終行を取得することができます。
しかしUsedRangeだけでは、空白セルを含むデータの最終行を取得することが出来ません。
本日は空白セルを含んだデータでも最終行を取得することが出来るVBAの書き方を紹介します。
空白セルを含むデータの最終行を調べる方法
Endプロパティを使用する
ワークシートの最終行から上に向かって値の入力されているセルへ移動します。
画像のような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」と表示されます。
UsedRangeプロパティを使用する
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」とメッセージが表示されます。
最後に
いかがだったでしょうか。
本日はExcelVBA最終行を取得する方法を紹介しました。
For文を使用して繰り返し処理をする場合などデータの最終行を使用することはあります。
今回掲載しているVBAはコピペをして使用できるので、ぜひ使用してください。