Rangeオブジェクトその6

テーマ:

今回はCurrentRegionプロパティの話です

 

CurrentRegionプロパティとは
オブジェクトを返すプロパティです
アクティブセル領域 (Range オブジェクト) を返します
アクティブセル領域とは
空白行と空白列で囲まれたセル範囲です
値の取得のみ可能です

 

以上はEXCELリファレンスの引用です
リファレンスはこれからもよく利用しますので
アドレスを載せておきます

 

まずはCurrentRegionプロパティの欄です

https://msdn.microsoft.com/ja-jp/library/office/ff196678.aspx

 

リファレンスのオブジェクト モデルトップページです

https://msdn.microsoft.com/ja-jp/library/office/ff194068.aspx

 

それではリファレンスの内容を説明します

 

「オブジェクトを返すプロパティ」は
対象物の属性を示す機能ですとなります

 

「アクティブ セル領域
(Range オブジェクト) を返します」は
アクティブセル領域を扱う機能ですとなります

 

次はそのままで大丈夫ですよね


最後の「値の取得のみ可能です」は
値の変更等はできませんということで
専門的には「Read Only」のことです

 

何となくイメージできましたか?
実際に動かしてみることが近道です

 

書式はObject.CurretRegionです

マクロの簡単な説明です
CurrentRegionプロパティでアクティブセル範囲を取得し
イミディエイトウインドにそのアドレスを表示させるものです
結果は下図です

CurrentRegionプロパティのオブジェクトとして
セル「A1」を指定しています

 

指定場所は選択したい範囲内にありますので
A1からE11までの範囲を選択できています


アドレスも$A$1:$E$1で間違いありません

 

次のケースではどうでしょうか?

先頭行、先頭列に空欄のあるケースです
結果は下図です

残念ながら失敗です
基準点がアクティブセル範囲内になかったことが
失敗の理由です


Range(“A1“).CurrentRegion.Selectの式を
Range(“B5“).CurrentRegion.Selectと書き換えれば
正常に動きます

 

CurrentRegionプロパティは
オブジェクトの指定をアクティブセル範囲内に
することが条件
となります

 

 

ところで表の作成は
タイトル行が先頭になるのが一般的です
データをコピペする時は
このタイトル行を除くデータを
選択する方法がCurrentRegionで作れます
こんな感じです

マクロの説明をします

 

tblはRange型の変数です


最初にアクティブセル範囲内に
基準点を設置するために
セル「A10」をアクティブにします
(基準点はアクティブセル範囲内であれば
どこでも大丈夫です)

 

Set文
変数tblにアクティブセル範囲を指定します


次の式が長いですがポイントです

tbl.Offset(1, 0).Resize(tbl.Rows.Count – 1, _
tbl.Columns.Count).Select

 

長くて意味わかんない!
と投げ出さないでね
重要キーワードを抑えれば
難しくありません

 

これはOffsetプロパティ
Resizeプロパティの組合せです

 

Resizeプロパティの詳細説明は
最後の補足で話しますので
ここでは名前の通り
サイズを変更するものと理解して下さい

 

Offsetプロパティは説明済なので
理解できますよね
tbl.Offset(1, 0)はtblオブジェクトを
1行下に移動するということです

 

Resize(tbl.Rows.Count – 1, _
tbl.Columns.Count)では
行数をtbl.Rows.Count – 1に
桁数をtbl.Columns.Countに
選択範囲を変更するという意味です

 

Rows.Countはシートの行数なので
tbl.Rows.Count – 1は
アクティブセル範囲の行数を
マイナス1するという意味です

 

同じようなColumns.Countは
何となくイメージできますか

 

こちらはシートの列数ですね
したがって
Resize式はアクティブセル範囲の
行数を1つ少なく変更することです

 

まとめますね

 

A1からE11の範囲をOffsetで
A2からE12の範囲にします

 

さらにResizeでA2行を削除します

 

行単位で削除されたので
下側の行全体が上に移動した結果
選択範囲はA2からE11となります

 

実際の結果は下図です

タイトル行を除く表全体が選択されています

 

利用価値が高い式なので
しっかりと理解して実践業務に活かして下さい

 

次回はSpecialCellsについてです

 

補足
Resizeプロパティについて

 

指定された範囲のサイズを変更します
サイズが変更されたセル範囲
(Range オブジェクト) を返します


構文
式.Resize(RowSize, ColumnSize)
式 Range オブジェクトを返す
オブジェクト式を指定します
以上がリファレンスからの引用です

https://msdn.microsoft.com/ja-jp/library/office/ff193274.aspx

 

解説します
Resizeプロパティ

選択したセル範囲を
式で指定した行数と列数に
サイズを変更するものです

 

指定をしなければ元のサイズのままです


プラス指定は行であれば下側に増加します

 

マイナス指定は
選択したセル範囲の
最初の行から削除されます

 

マイナス指定は
頭から削除が始まりますので
注意して下さい

 

http://okheeoffice.com/study-vba/0019