「vba excel offset 範囲指定」
「エクセル マクロ OFFSET 範囲」
という検索キーワードでのアクセスに気付きました。
Rangeオブジェクトに用意されているOffsetプロパティを使って、
セル範囲を表すRangeオブジェクトを取得するには、どのようなコードを書けばいいのかを探していらしたのでしょう。
Range.Offsetはオフセットしたセルを取得するだけ
まず理解していただきたいのは、RangeオブジェクトのOffsetプロパティだけでは範囲指定することはできない、という仕様です。
Range.Offsetプロパティは、いずれかのセル範囲または1個のセルから、ずらしたセル・シフトしたセル・オフセットしたセルを表すRangeオブジェクトを取得するだけです。
Range.Offsetプロパティをセル範囲の取得にからめるならば、何らかのプロパティやメソッドを使って取得したセル範囲をオフセットするか、1つのセルをオフセットしてから何らかのプロパティあるいはメソッドで範囲に広げるかです。
範囲をオフセットするサンプルマクロ
セル範囲をオフセットする様子は、以下のSubプロシージャで確認できます。
Dim rng As Range
Set rng = Range("A1:C3")
rng.Select
MsgBox rng.Address(False, False)
Set rng = rng.Offset(1, 0)
rng.Select
MsgBox rng.Address(False, False)
実行すると、
Set rng = Range("A1:C3")
rng.Select
3行3列のセル範囲A1:C3が選択されて、
MsgBox rng.Address(False, False)
セル番地がメッセージボックスに表示されます。
その後、3行3列のセル範囲を1行0列オフセットしたセル範囲、すなわちA2:C4セルを表すRangeオブジェクトをOffsetプロパティで取得して、
Set rng = rng.Offset(1, 0)
rng.Select
選択して、
セル番地をメッセージボックスに表示しています。
MsgBox rng.Address(False, False)
この例の場合、セル範囲を表すRangeオブジェクトを取得しているのはRangeプロパティであって、Offsetプロパティではありません。
1つのセルをオフセットしてから範囲に広げるサンプルマクロ
1つのセルをオフセットしてから範囲に広げる様子は、以下のSubプロシージャで確認できます。
Dim rng As Range
Set rng = Range("A1")
rng.Select
MsgBox rng.Address(False, False)
Set rng = rng.Offset(1, 0)
rng.Select
MsgBox rng.Address(False, False)
Set rng = rng.Resize(3, 3)
rng.Select
MsgBox rng.Address(False, False)
実行すると、A1セルだけが選択され、
Set rng = Range("A1")
rng.Select
セル番地がメッセージボックスに表示されます。
MsgBox rng.Address(False, False)
つづいて、A1セルから1行0列オフセットしたA2セルが選択され、
Set rng = rng.Offset(1, 0)
rng.Select
セル番地がメッセージボックスに表示されます。
MsgBox rng.Address(False, False)
最後に、A2セルを起点として3行3列のセル範囲A2:C4セルが選択され、
Set rng = rng.Resize(3, 3)
rng.Select
セル番地がメッセージボックスに表示されます。
MsgBox rng.Address(False, False)
セル範囲を表すRangeオブジェクトを取得しているのは、RangeオブジェクトのRsizeプロパティであって、Offsetプロパティではないことを意識してください。
最終更新日時:2018-11-10 06:56
- Newer:Split関数の戻り値は文字列型配列
- Older:DateSerialの引数でNowとDateの違い
Home » Excel VBA Rangeオブジェクト » Offsetプロパティ » Offsetプロパティでセル範囲を取得したい?