VBA入門
RangeのOffsetプロパティ

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2025-03-26

第83回.RangeのOffsetプロパティ


Offsetプロパティは、指定されたセル範囲(Rangeオブジェクト)をオフセット(移動)します、
オフセット(移動)したセル範囲を表すRangeオブジェクトを返します。


Offsetとは、「差し引きする」意味ですが、
Offsetプロパティで取得されるのは、元のRange範囲を、指定した行数・列数移動したRange範囲になります。
Offsetは、マクロVBAでは習得必須のRangeのプロパティになります。


Offsetプロパティの構文

Range.Offset(RowOffset, ColumnOffset)

RowOffset

オフセットする範囲の行数 (正、負、または 0) を指定します。
正の値は下方向、負の値は上方向のオフセットを表します。
既定値は 0 です。

ColumnOffset

オフセットする範囲の列数 (正、負、または 0) を指定します。
正の値は右方向、負の値は左方向のオフセットを表します。
既定値は 0 です。


名前付き引数ですが、名前付きを使用するまでもないでしょう。
戻り値
オフセット後のRangeオブジェクトになります。


Offsetの使用例

Range("A1").Offset(3, 3).Select
A1セルを、行方向に3、列方向に3移動した、D4セルになります。

Range("A1:A3").Offset(, 3).Select
A1:A3セル範囲を、列方向に3移動した、D1:D3セル範囲になります。

Range("A1:C1").Offset(3).Select
A1:C1セル範囲を、行方向に3移動した、A4:C4セルになります。

Offsetのネスト
Range("A1").Offset(3).Offset(, 3).Select
これと
Range("A1").Offset(3, 3).Select
これの結果は同じになります。


Offsetの注意点

A2セルのOffset(1)がA3セルになるとは限りません。

MsgBox Range("A2").Offset(1).Address

この結果は、"$A$3"になる場合と、違う結果になる場合があります。
A2セル~A4セルがセル結合されている場合、

VBA マクロ Offsetプロパティ

上記VBAの結果は、
$A$5
となります。
セル結合内部から移動する場合は、結合範囲は一つとして数えます。
しかし、結合範囲外からの場合、

Debug.Print Range("A1").Offset(2).Address

この結果は、
$A$3
となります。
セル結合外部から移動する場合は、セル結合の影響をうけません。

したがって、以下の2つのVBAは違う結果となります。

Debug.Print Range("A1").Offset(2).Address
Debug.Print Range("A1").Offset(1).Offset(1).Address

結果は、
$A$3
$A$5
となります。
前者は、セル結合外部からの移動であり結合の影響をうけません。
後者は、最初の.Offset(1)が結合内部になるので結合の影響を受けます。

列方向も同様になります。
A1セル~C3セルが結合されている場合、

MsgBox Range("A1").Offset(, 1).Address 

この結果は、"$D$1"になります。

※Addressはセル番地を文字列で取得するRangeのプロパティです。


Offsetのまとめ

Offsetは、非常に重宝するプロパティです。
使い方は簡単なので、ぜひしっかりと習得してください。

以下のページも参考にしてください。
Offset、Resizeを使いこなそう
・OffsetプロパティとResizeプロパティの構文 ・OffsetとResizeの基本 ・Offsetの注意点 ・OffsetとResizeの応用 ・OffsetやResizeでVBAが簡潔になる例

Rangeのプロパティは非常に沢山あります。
マクロVBA入門で重要なプロパティは一通り紹介していますが、他のプロパティにも目を通しておくと良いでしょう。
Rangeのプロパティ一覧 ・・・ 詳細解説ページへのリンクあり
・Excel2010までのRangeオブジェクトのプロパティ一覧 ・Excel2016で追加されたRangeオブジェクトのプロパティ一覧 ・スピルにより追加されたRangeオブジェクトのプロパティ一覧




同じテーマ「マクロVBA入門」の記事

第80回.ファイル操作Ⅰ(その他)
第81回.総合練習問題9
第82回.RangeのResizeプロパティ
第83回.RangeのOffsetプロパティ
第84回.RangeのAddressプロパティ
第85回.結合セルの扱い
第86回.総合練習問題10
第88回.並べ替え(Sort)
第89回.オートフィルター(AutoFilter)
第90回.フィルターオプションの設定(AdvancedFilter)
第91回.条件付き書式(FormatCondition)


新着記事NEW ・・・新着記事一覧を見る

シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ