[Excel VBA]
RangeオブジェクトのCurrentRegionプロパティを使用すると、指定したセルを含むアクティブセル領域(連続してデータが入力されている範囲)を取得できます。表のセル範囲を取得したいときに使えます。
また、ほかのプロパティと組み合わせることで、表の中の特定の行や列を取得することも可能になります。
書式
Rangeオブジェクト.CurrentRegion
指定したセルを含むアクティブセル領域を返します。読み取り専用のプロパティです。
使用例
表全体の取得
隣接するセルに何も入力されていない表であれば、CurrentRegionプロパティを使用して表のセル範囲を取得できます。
マクロを実行する時点でデータの件数がわからなくても、見出しのセルの位置は決まっていることが多いと思います。Rangeオブジェクトとして見出しのセルを指定すれば、マクロの実行時点での表全体を確実に取得できます。
Range("B3").CurrentRegion.Select |
セルB3を含む表全体(アクティブセル領域)を選択する |
メモ
表の行数と列数を求める
表の行数を求めるには、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を含む表の最終行を選択する |
|
セルB3を含む表の最終行を選択する |
見出しを除いたデータ行全体の取得
見出し行を除いて表のデータ行の部分を取得したいときは、CurrentRegionプロパティにOffsetプロパティとResizeプロパティを組み合わせます。
次のどちらのコードも実行結果は同じです。コード中の青色の部分は、データの行数(表の行数から1を引いた数)を表します。
Range("B3").CurrentRegion.Offset(1).Resize(Range("B3").CurrentRegion.Rows.Count - 1).Select |
セルB3を含む表のセル範囲を1行下に移動し、そのサイズを「表の行数 - 1」行に変更した範囲を選択する |
|
|
メモ
「Range("B3").CurrentRegion」で、表全体が取得されます。
列見出しを除いた○列目の取得
特定の列から列見出しを除外したデータ部分のセル範囲を取得したいことがあります。表の○列目全体を「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」行に変更した範囲を選択する |
|
|