【Excel VBA】表のセル範囲(アクティブセル領域)を参照する…CurrentRegionプロパティ

[Excel VBA]

RangeオブジェクトのCurrentRegionプロパティを使用すると、指定したセルを含むアクティブセル領域(連続してデータが入力されている範囲)を取得できます。表のセル範囲を取得したいときに使えます。

また、ほかのプロパティと組み合わせることで、表の中の特定の行や列を取得することも可能になります。

スポンサーリンク

書式

Rangeオブジェクト.CurrentRegion

指定したセルを含むアクティブセル領域を返します。読み取り専用のプロパティです。

使用例

表全体の取得

隣接するセルに何も入力されていない表であれば、CurrentRegionプロパティを使用して表のセル範囲を取得できます。

マクロを実行する時点でデータの件数がわからなくても、見出しのセルの位置は決まっていることが多いと思います。Rangeオブジェクトとして見出しのセルを指定すれば、マクロの実行時点での表全体を確実に取得できます。

Range("B3").CurrentRegion.Select
セルB3を含む表全体(アクティブセル領域)を選択する

メモ

アクティブセル領域
「アクティブセル領域」とは、指定したセルを含む、空白行と空白列で囲まれた、データの入力範囲です。ピンとこないという人は、入力済のセルを選択して、[Ctrl]+[Shift]+[*](文字キー)、または[Ctrl]+[*](テンキー)キーを押してみてください。このときの選択範囲がアクティブセル領域です。CurrentRegionプロパティで取得されるのは、このアクティブセル領域になります。
アクティブセル領域は長方形のセル範囲なので、表の真上のセルにタイトルを入力した場合、タイトルの行を含めたセル範囲がアクティブセル領域になります。また、表の中にデータが全く入力されていない空白行や空白列がある場合、それ以降の行や列はアクティブセル領域に含まれません。
CurrentRegionプロパティを表のセル範囲の取得に利用する場合は、表に隣接するセルに何も入力しない(入力する場合はそれを考慮したプログラミングをする)、表の中に空白行や空白列を作らないなどの配慮が必要です。

表の行数と列数を求める

表の行数を求めるには、CurrentRegionプロパティで表全体を取得したあと、Rowsプロパティで全行を取得し、それをCountプロパティでカウントします。

同様に、Columnsプロパティを使用すれば、列数も求められます。

表の行数の取得

MsgBox "行数:" & Range("B3").CurrentRegion.Rows.Count
セルB3を含む表の行数をメッセージに表示する

表の列数の取得

MsgBox "列数:" & Range("B3").CurrentRegion.Columns.Count
セルB3を含む表の列数をメッセージに表示する

 

表の○行目の取得

「Rangeオブジェクト.CurrentRegion.Rows(行番号)」の記述で、表の中の特定の行を取得できます。

下のコードの青色の「1」の部分を「2」「3」に変えれば、表の2行目、3行目が取得されます。

Range("B3").CurrentRegion.Rows(1).Select
セルB3を含む表の1行目を選択する

 

表の最終行の取得

「Rangeオブジェクト.CurrentRegion.Rows(行番号)」の「行番号」に表の行数を指定すれば、表の最終行を取得できます。

次のどちらのコードも実行結果は同じです。コード中の青色の部分は、表の行数(ここでは5)を表します。

Range("B3").CurrentRegion.Rows(Range("B3").CurrentRegion.Rows.Count).Select
セルB3を含む表の最終行を選択する
  1. With Range("B3").CurrentRegion
  2.     .Rows(.Rows.Count).Select
  3. End With
セルB3を含む表の最終行を選択する

 

見出しを除いたデータ行全体の取得

見出し行を除いて表のデータ行の部分を取得したいときは、CurrentRegionプロパティにOffsetプロパティとResizeプロパティを組み合わせます。

次のどちらのコードも実行結果は同じです。コード中の青色の部分は、データの行数(表の行数から1を引いた数)を表します。

Range("B3").CurrentRegion.Offset(1).Resize(Range("B3").CurrentRegion.Rows.Count - 1).Select
セルB3を含む表のセル範囲を1行下に移動し、そのサイズを「表の行数 - 1」行に変更した範囲を選択する
  1. With Range("B3").CurrentRegion
  2.     .Offset(1).Resize(.Rows.Count - 1).Select
  3. End With
  1. セルB3を含む表のセル範囲において
  2. セル範囲を1行下に移動し、そのサイズを「行数 - 1」行に変更した範囲を選択する

メモ

データ行取得の考え方
コードを3つに分解して考えると分かりやすいと思います。
Range("B3").CurrentRegion」で、表全体が取得されます。
「Range("B3").CurrentRegion.Offset(1)」で、取得される範囲が1行分下に移動します。
「Range("B3").CurrentRegion.Offset(1).Resize(表の行数 - 1)」で、取得される範囲が1行分小さくなります。

列見出しを除いた○列目の取得

特定の列から列見出しを除外したデータ部分のセル範囲を取得したいことがあります。表の○列目全体を「Rangeオブジェクト.CurrentRegion.Rows(列番号)」という記述で取得し、OffsetプロパティとResizeプロパティを組み合わせて列見出しを除外します。

次のどちらのコードも実行結果は同じです。コード中の青色の「2」は2列目を表します。「1」や「3」に変えれば、1列目や3列目を取得できます。

Range("B3").CurrentRegion.Columns(2).Offset(1).Resize(Range("B3").CurrentRegion.Rows.Count - 1).Select
セルB3を含む表の2列目のセル範囲を1行下に移動し、そのサイズを「表の行数 - 1」行に変更した範囲を選択する
  1. With Range("B3").CurrentRegion
  2.     .Columns(2).Offset(1).Resize(.Rows.Count - 1).Select
  3. End With
  1. セルB3を含む表のセル範囲において
  2. 2列目のセル範囲を1行下に移動し、そのサイズを「表の行数 - 1」行に変更した範囲を選択する

スポンサーリンク

関連記事