今回は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