CurrentRegion および UsedRange プロパティを使用する

Microsoft Office 2000/Visual Basic プログラマーズ ガイド   

一定範囲のセルに対して機能するコードを書き込む場合が数多くありますが、コードを書き込む際には範囲についての情報はありません。たとえば、範囲の大きさや場所、またはほかのセルに対するセルの位置について不明な場合があります。大きさを制御できない一定範囲のセルでの作業を行う際には、CurrentRegion および UsedRange プロパティを使用できます。Offset プロパティを使用してセルの位置が不明なセルに関連するセルで作業することができます。Offset プロパティの詳細については、この章の「Offset プロパティを使用する」を参照してください。

図 5.2 で示すように、Range オブジェクトの CurrentRegion プロパティは、Range オブジェクトを返し、この Range オブジェクトは (Range オブジェクトには含まれない) 空白の行と列またはワークシートの境界の組み合わせによって区切られた範囲を表します。

5.2 ActiveCell および CurrentRegion プロパティによって返された範囲

CurrentRegion プロパティは単一のワークシートの異なる範囲を返すことができます。このプロパティは関連するセル グループの階層を知る必要がある操作において役立ちますが、確実に知っておく必要があるのはグループ内での 1 つまたは複数のセルの位置です。たとえば、アクティブ セルがセルのテーブルの内部にある場合、次のコード行を使用してテーブル全体に特定の書式を適用できます。

  ActiveCell.CurrentRegion.AutoFormat xlRangeAutoFormatAccounting4

また、次の例のように CurrentRegion プロパティを使用してセルのコレクションを返すこともできます。

  Dim rngCurrentCell As Excel.Range

For Each rngCurrentCell In ActiveCell.CurrentRegion.Cells
   ' ここで個別のセルで作業します。
Next rngCurrentCell

各 Worksheet オブジェクトには、使用されているワークシートの領域を表す Range オブジェクトを返す UsedRange プロパティがあります。UsedRange プロパティは境界となる最も左上および最も右下にある空白でないセルによって表示される領域を表し、その間のすべてのセルを含みます。たとえば、2 つのセル、A1 および G55 のみが入力されたワークシートがある場合、このワークシートの UsedRange プロパティは、A1 および G55 を含む、その間の 385 個のセルが含まれる Range オブジェクトを返します。

SpecialCells メソッドと UsedRange プロパティを併用して、指定された種類のワークシート上にあるすべてのセルを表す Range オブジェクトを返します。たとえば、次のコードは式を含むアクティブなワークシート内のすべてのセルを含む Range オブジェクトを返します。

  Dim rngFormulas As Excel.Range
Set rngFormulas = ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas)

Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH05 サブフォルダに含まれる ExcelSamples.xls ファイルのサンプル コードでは、範囲の定義に使用する CurrentRegion および UsedRange プロパティを使った多くのプロシージャを参照できます。