セル範囲を取得する UsedRange と CurrentRegion

ワークシートで使用中のセル範囲を取得するプロパティとして、UsedRangeCurrentRegion の二つがあります。これらの特徴と使い分けについて説明します。

ワークシート全体を For Each 文などで処理すると、1,048,576行 × 16,384列が対象となり無駄が多くなります。そこで、これらのプロパティを使って使用中のセル範囲を取得して対象を限定します。似た用途のプロパティですが、異なる点も多いので、うまく使い分けましょう。

UsedRange と CurrentRegion の基本と使いどころ

どちらもRangeオブジェクトを返します。

Dim rngUR As Range
Set rngUR = ActiveSheet.UsedRange
Dim rngCR As Range
Set rngCR = ActiveCell.CurrentRegion

UsedRangeは、Worksheetオブジェクトに対するプロパティです。
使用中の左上端セルから右下端セルの範囲を取得します。

入力途中の空行がある表や不定形の表を処理するのに向いています。

空の行・列があっても範囲に含まれる

CurrentRegionは、起点となるRangeオブジェクトに対するプロパティです。
起点から連続入力されているセルの範囲を取得します。

読み込んだデータなど、整形された表を処理するのに向いています。

空の行・列で連続が切れる範囲は含まれない

それぞれの特徴と注意

書式設定もUsedRangeの対象

UsedRangeでは、空セルが範囲に含まれることがあります。これは、フォントや罫線の設定も「使用中」の対象になるためです。「太字」が設定された空セルなど目視で確認できないので要注意です。

罫線が設定されたセルも範囲に含まれる

起点の周囲がCurrentRegionの判定対象

CurrentRegionでは、起点の周囲のセルが「連続」判定の対象になります。このため、起点自体は空でも連続とみなされます。


 

他者から提供されたデータなどでは、予期しないところにスペースが入力されていたり、セル書式が残っていたりするものです。そうしたデータに対して、UsedRangeCurrentRegion で得た範囲をすべて処理するのは避けましょう。例えば、「A列に数値が入力されている行のみ」のような条件判定を追加しておくことをお勧めします。
タイトルとURLをコピーしました