空白行、列に囲まれた部分を選択する
空白行と空白列に囲まれた部分のことをアクティブセル領域と言います。
この部分は一般的には表形式になっていることが多いと思います。
キーボードショートカットの「Ctrl + *」で選択が可能です。
CurrentRegionプロパティ
アクティブセル領域を選択する場合は、CurrentRegionプロパティを利用します。
CurrentRegionプロパティは親オブジェクトにRangeオブジェクトを指定する必要があります。
CurrentRegionプロパティを使うことでRangeオブジェクトとして指定したセルが含まれている表全体を選択することになります。
ソースコード
1 2 3 4 5 6 7 8 9 |
Sub CurrentRegionTest() ActiveCell.CurrentRegion.Select Range("B2").CurrentRegion.Select Cells(1, 1).CurrentRegion.Select [B3].CurrentRegion.Select End Sub |
Rangeオブジェクトの例をいくつか挙げていますが、どの書き方でも構いません。
指定するセルは表の中にあるセルであればどこでもいいのですが、「指定セルは表の一番左上にする」などのルールとして決めておいた方が表のフォーマットが変わった場合などでも、ある程度対応しやすくなると思います。
表の先頭行位置や行数、先頭列位置や列数
CurrentRegionプロパティによる表の選択で、その表の先頭行や行数などを取得する場合には以下のようなコードを書きます。
内容はコメントの通りですが、最終行や最終列は事前に先頭位置と行数や列数から算出しなければなりません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub CurrentRegionSizeTest() Dim iRowStart '// 先頭行 Dim iRowCount '// 行数 Dim iRowEnd '// 最終行 Dim iColStart '// 先頭列 Dim iColCount '// 列数 Dim iColEnd '// 最終列 '// 先頭行位置 iRowStart = Range("D5").CurrentRegion.Row '// 表の行数 iRowCount = Range("D5").CurrentRegion.Rows.Count '// 表の最下段行位置 iRowEnd = iRowCount + iRowStart - 1 '// 先頭列位置 iColStart = Range("D5").CurrentRegion.Column '// 表の列数 iColCount = Range("D5").CurrentRegion.Columns.Count '// 表の一番右の列位置 iColEnd = iColCount + iColStart - 1 End Sub |
注意点
保護されているシートでは使えない
CurrentRegionプロパティは保護中のワークシートでは利用できません。
もし利用しようとした場合は実行時エラー1004が発生します。
空白行、空白列で囲わないといけない
表を作成する場合に、枠線で囲っていても表の隣に値を入力することは多々あります。
そのような「表+隣入力あり」の場合は、隣の入力されているセルも選択されてしまいます。
CurrentRegionプロパティは空白行と空白列で囲まれた範囲を選択しますので、表の周りのセルには何も入力してはいけない、というルールを徹底しなければなりません。