Home » ExcelVBA Rangeオブジェクト » UsedRangeで最終行番号が取得できない

UsedRangeで最終行番号が取得できない

対象:Excel2010, Excel2013, Windows版Excel2016

「vba usedrange.rows.count 上手くいかない」
という検索キーワードでこのサイト『インストラクターのネタ帳』へのアクセスがありました。

WorksheetオブジェクトのUsedRangeプロパティを使った、

ActiveSheet.UsedRange.Rows.Count

といったコードで、最終行番号を取得できると思い込んでいた方による検索ではないかと推測しています。

ActiveSheet.UsedRange.Rows.Countは行数を取得するだけ

「ActiveSheet.UsedRange.Rows.Count」は、最終行番号を取得するコードではなく、使われているセル範囲の行数をカウントするコードに過ぎません。

[スポンサードリンク]

であるにも関わらず「ActiveSheet.UsedRange.Rows.Count」で最終行番号を取得できると、思い込んでいる方がいらっしゃいます。

例えば下図のようなシートの場合、「ActiveSheet.UsedRange.Rows.Count」は「5」を返します。

この場合は、使っている行数と最終行番号が、たまたま一致しています。

しかし下図のようなシートの場合でも「ActiveSheet.UsedRange.Rows.Count」は「5」を返します。

この場合、上に空白行があるために使っている行数と最終行番号が一致しません。

「vba usedrange.rows.count 上手くいかない」
と検索なさった方は、後者のような状況だったのではないかと想像しています。

UserRangeプロパティで最終行番号を取得するサンプルマクロ

WorksheetオブジェクトのUsedRangeプロパティを使った最終行番号を取得するには、以下のようなコードにする必要があります。

Sub 使用している最終行番号の取得_With()
 With ActiveSheet.UsedRange
  MsgBox .Item(.Count).Row
 End With
End Sub

1行で、

MsgBox ActiveSheet.UsedRange.Item(ActiveSheet.UsedRange.Count).Row

としても同じですが、横に長いので、With文にしています。

サンプルマクロで利用しているオブジェクト式について

カッコ内の「ActiveSheet.UsedRange.Count」で、使用しているセル範囲の数を取得できます。

コレクションとしてのRangeオブジェクトから、単独のRangeオブジェクトを取得するItemプロパティの引数に、

「ActiveSheet.UsedRange.Count」を指定した、オブジェクト式で「ActiveSheet.UsedRange.Item(ActiveSheet.UsedRange.Count)」で、使っているセル範囲の最終セルを表すRangeオブジェクトを取得できます。

その使用しているセル範囲の最終セルを表すRangeオブジェクトの、Rowプロパティで行番号を取得しています。

最終更新日時:2022-07-04 15:55

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » UsedRangeで最終行番号が取得できない

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

検索


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

.