Home » ExcelVBA Rangeオブジェクト » Offsetプロパティ » Offsetプロパティでセル範囲を取得したい?

Offsetプロパティでセル範囲を取得したい?

動作検証バージョン:Windows版Excel(バージョン1810 ビルド11001.20074)

「vba excel offset 範囲指定」
「エクセル マクロ OFFSET 範囲」
という検索キーワードでのアクセスに気付きました。

Rangeオブジェクトに用意されているOffsetプロパティを使って、

セル範囲を表すRangeオブジェクトを取得するには、どのようなコードを書けばいいのかを探していらしたのでしょう。

[スポンサードリンク]

Range.Offsetはオフセットしたセルを取得するだけ

まず理解していただきたいのは、RangeオブジェクトのOffsetプロパティだけでは範囲指定することはできない、という仕様です。

Range.Offsetプロパティは、いずれかのセル範囲または1個のセルから、ずらしたセル・シフトしたセル・オフセットしたセルを表すRangeオブジェクトを取得するだけです。

Range.Offsetプロパティをセル範囲の取得にからめるならば、何らかのプロパティやメソッドを使って取得したセル範囲をオフセットするか、1つのセルをオフセットしてから何らかのプロパティあるいはメソッドで範囲に広げるかです。

範囲をオフセットするサンプルマクロ

セル範囲をオフセットする様子は、以下のSubプロシージャで確認できます。


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)

End Sub

実行すると、
  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プロシージャで確認できます。


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)

End Sub

実行すると、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

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » Offsetプロパティ » Offsetプロパティでセル範囲を取得したい?

TrackBack:0

TrackBack URL
[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » Offsetプロパティ » Offsetプロパティでセル範囲を取得したい?

「Offsetプロパティ」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.