Home » ExcelVBA Rangeオブジェクト » Offsetプロパティ » Excel VBAのOffsetとResizeの違い

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「vba offset resize 違い」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

RangeオブジェクトのOffsetプロパティと、

RangeのOffsetとResizeを確認するExcelマクロ

Resizeプロパティの、

RangeのOffsetとResizeを確認するExcelマクロ

違いについて調べている方による検索です。

この2つは、組み合わせて利用することもよくあるため、それぞれがどんなプロパティなのか、違いがわからなくなってしまったのかもしれません。

[スポンサードリンク]

説明を読むよりも、引数を変更しながら簡単なマクロを何度か実行するほうが、理解は深まるはずです。

Offsetプロパティを確認するサンプルマクロ

まず、Range.Offsetプロパティを確認しましょう。
以下のマクロを実行すると、実行するたびに、アクティブセルが1つ下のセルに移動します。

Sub Offsetプロパティのサンプル()
 ActiveCell.Offset(1, 0).Select
End Sub

Range.Offsetプロパティは、元のRangeオブジェクト(上記マクロの場合アクティブセルを表すRangeオブジェクト)から、引数に指定された行・列だけシフトしたRangeオブジェクトを返します。

引数は、Excelマクロでよくお世話になるCellsプロパティの引数と同じく、第1引数が行・第2引数が列です。

ですから、上記のマクロのOffsetプロパティの引数を、

ActiveCell.Offset(0, 1).Select

に変更して実行すると、実行するごとにアクティブセルが1つ右隣のセルに移動します。

Offsetプロパティの2つの引数をさまざまな整数(マイナスも可)に変更しながら、上記マクロを何度か実行してみてください。

Resizeプロパティを確認するサンプルマクロ

つづいては、Range.Resizeプロパティの確認です。
以下のマクロを実行すると、どのようなセル範囲が選択されていたとしても、アクティブセルを左上のセルにした2行2列のセル範囲が選択されます。

Sub Resizeプロパティのサンプル()
 ActiveCell.Resize(2, 2).Select
End Sub

Resizeプロパティは、元のRangeオブジェクト(上記マクロの場合アクティブセルを表すRangeオブジェクト)を起点にして、引数に指定された行数・列数のセル範囲を表すRangeオブジェクトを返します。

引数は、Offsetプロパティの引数と同じく、第1引数が行・第2引数が列です。

Resizeプロパティの2つの引数をさまざまな自然数(マイナスは不可)に変更して上記マクロを何度か実行してみてください。

OffsetプロパティとResizeプロパティの引数の違い

RangeオブジェクトのOffsetプロパティもResizeプロパティも引数を2つ指定できますが、指定できる値に決定的な違いがあります。

Offsetプロパティの場合は負の整数や「0」が指定されてもOKです。
Resizeプロパティの場合は負の整数や「0」が指定された場合は実行時エラーが発生します。

最終更新日時:2023-06-02 11:21

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » Offsetプロパティ » Excel VBAのOffsetとResizeの違い

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

検索


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

.