エクセルのマクロVBAを勉強していると「Offsetプロパティ」という言葉がよく出てきます。
いきなり出てくると、何それ!?って感じで思考停止してしまいます。(私がそうでした)
そんな方のために、今回簡単にまとめていきたいと思います。
Offsetプロパティとは?
ズバリ、指定したセルやセル範囲を移動させるためのものです。
例えば、A列に入力されている値を何か編集して、となりのB列に出力したいとします。
この操作は、A列→B列というように移動しているとみなせるので、そんなときに使うのがこのOffsetプロパティです。
使い方
Offsetプロパティの構文のようなものがこれです。
Range・・・セルやセル範囲のこと
オブジェクト・・・操作対象となるもの(セルやシートなど)
行シフト・・・選択したRangeオブジェクトからどれだけ行方向(横方向)に移動させたいか
列シフト位置・・・選択したRangeオブジェクトからどれだけ列方向(縦方向)に移動させたいか
つまり、「操作対象としたセル範囲をどれだけ縦横に移動させたいか」を表している構文です。
実用例
~レベル1~選択範囲を移動させたいとき
B1セル→C3セルへ選択範囲を移動させたいときは、行方向に1、列方向に2だけ移動させるので以下となります。
1 |
Range(“B2”).Offset(1,2).select |
~レベル2~Resizeプロパティとの組み合わせ
Resizeプロパティは、一言で表すと「サイズを変更できるプロパティ」です。
このResizeプロパティとOffsetoプロパティを組み合わせて、「選択範囲のサイズを変えて移動する」ということができます。
例えば、下の表から入会日欄だけを選択したい場合、次のようなステップとなります。
①表全体を選択する
1 |
Set 表全体 = Range("a2").CurrentRegion |
CurrentRegionプロパティは「Rangeを基点としたアクティブセル領域(数字や文字が連続して記入されている範囲)を取得する」プロパティです。
つまり今回の場合は、A2セルを基点として、数字や文字が連続的に入力されている範囲 = 表全体が選択範囲となります。
②売上日欄から1行減らした範囲を選択
1 |
表全体 = Resize(表全体.Rows.Count - 1, 1) |
ここでResizeプロパティが出てきました!
①で選択した「表全体」の範囲から、「入会日欄から1行減らした」範囲へとサイズを変更しています。
Rows.Countで、行数を返します。今回の場合は表全体の行数なので2~9行の計8行です。
(表全体.Rows.Count – 1, 1)となっているため(8行-1, 1)、つまり(7,1)となります。
これで、表全体 = Resize(7, 1)と読み替えることができます。
表全体の行方向に7列、列方向に1列だけ選択するという意味です。
③Offsetプロパティを使い、行方向に1行ずらす
②のままでは、タイトルの「入会日」が含まれ、実際の日付が入力されているA9セルが含まれていません。
そのため、②で選択した範囲を1行ずらすことで、本当に選択したかった入会日の日付だけを取得することができます。
1 |
表全体.Resize(表全体.Rows.Count - 1, 1).Offset(1, 0) |
まとめ
今回出てきたプロパティを下にまとめます。
プロパティ名 | 書式 | 使い方 |
Offset | Range.Offset(行シフト位置, 列シフト位置) | 指定のセル範囲の移動 |
Resize | Range.Resize(行数, 列数) | 指定範囲のサイズ変更 |
CurrentRegion | Range.CurrentRegion | 指定のセルを基点としたアクティブセルの取得 |
Offsetプロパティから派生して、他にもたくさんの用語が出てきましたが、1つ1つ確認して理解していきたいですね。
VBAは難しいけど、奥が深くて面白い!
また勉強したことをまとめていきたいと思います。
ではまた!
コメント