Worksheetオブジェクトに「UsedRange」という名前の、便利ですけれど、少々仕様のわかり辛いプロパティがあります。
このサイト『インストラクターのネタ帳』のアクセスログでも、
「excel2013 vba usedrangeとは」
といった検索キーワードを見かけます。
UsedRangeプロパティの返すRangeオブジェクトを確認するサンプルマクロ
以下のようなSubプロシージャで、Worksheet.UsedRangeの仕様を確認してから利用することをおすすめします。
Dim used As Range
Set used = ActiveSheet.UsedRange
used.Select
MsgBox used.Address(False, False)
End Sub
サンプルマクロを実行して確認しましょう
ワークシートにデータ入力したり、セルの書式設定したりしながら、上記のSubプロシージャを実行してWorksheet.UsedRangeが何を返すのかを確認しましょう。
新規シートの場合
新規に作成したばかりのワークシートの場合、
ActiveSheet.UsedRangeはA1セルを表すRangeオブジェクトを返します。
1つのセルにデータが入力されている場合
G7セルだけにデータが入力されているワークシートの場合、
ActiveSheet.UsedRangeはG7セルを表すRangeオブジェクトを返します。
2つのセルにデータが入力されている場合
例えばB2セルとG7セルだけにデータが入力されているワークシートの場合、
ActiveSheet.UsedRangeはB2:G7セルを表すRangeオブジェクトを返します。
1つのセルにデータが入力され別の1つのセルに書式設定されている場合
例えばG7セルだけにデータが入力され、C3セルに書式設定されているワークシートの場合、
ActiveSheet.UsedRangeはC3:G7セルを表すRangeオブジェクトを返します。
2つのセルに書式設定されている場合
例えば下図のようにC3セルとF6セルに書式設定されているワークシートの場合、
ActiveSheet.UsedRangeはC3:F6セルを表すRangeオブジェクトを返します。
Worksheet.UsedRangeとは
つまりWorksheet.UsedRangeは、基本的にはデータが入力されているかセルの書式設定が行われている、使われているセル範囲を表すRangeオブジェクトを返すプロパティです。
厄介なのは、一見データが入力されていないように見えても、何らかの書式が残っているために、使われていると見なされるケースがあることです。
この記事では、セルの塗りつぶし色を変更した目視確認しやすい例をあげていますけれど、中央揃えなどを設定したあとにデータを削除したようなケースは、かなり気づき辛いはずです。
UsedRangeはWorksheetオブジェクトにだけ用意されている
オブジェクトブラウザーで「usedrange」を検索するとわかるとおり、UsedRangeプロパティはWorksheetオブジェクトにだけ用意されています。
またグローバルメンバーでもないため、「.UsedRange」の前は、必ずWorksheetオブジェクトを取得するコード(オブジェクト式)でなければなりません。
最終更新日時:2022-07-04 15:38
Home » Excel VBA Rangeオブジェクト » Excel VBAのUsedRangeとは