VBA入門
RangeのOffsetプロパティ

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

第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
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第82回.RangeのResizeプロパティ
・Resizeプロパティの構文 ・Resizeの使用例 ・Resizeのまとめ
第83回.RangeのOffsetプロパティ
第84回.RangeのAddressプロパティ
Addressプロパティは、セル範囲(Rangeオブジェクト)の参照範囲を表す文字列の値を返します。引数により、参照方法($の付いた絶対参照)や形式(R1C1形式)を指定できます。Addressは、マクロVBAの中で処理の一環として使う事はあまり多くないかもしれませんが、VBA作成過程ではRangeオブジェクト変数…
第85回.結合セルの扱い
・セル結合に関する、メソッド・プロパティ ・セル結合のマクロVBA使用例 ・セル結合時の値消去 ・指定セル範囲に結合セルが存在するか判定するマクロVBA ・セル結合時のOffsetとResizeの注意点
第86回.総合練習問題10
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第88回.並べ替え(Sort)
・Range.Sortメソッド・・・Excel2003までのソート ・2007以降の並べ替え ・Excel2003までのSortとExcel2007以降のSortの使い分け
第89回.オートフィルター(AutoFilter)
・Range.AutoFilterメソッド ・AutoFilterModeプロパティ ・AutoFilterオブジェクト ・オートフィルタのVBA使用例 ・日付のフィルタ ・オートフィルタまとめ
第90回.フィルターオプションの設定(AdvancedFilter)
・フィルター詳細設定の使い方 ・Range.AdvancedFilter メソッド ・フィルターオプションの設定の関連記事
第91回.条件付き書式(FormatCondition)
・FormatConditionsコレクション ・FormatConditionオブジェクト ・条件付き書式のマクロVBA実践例 ・マクロVBAの条件付き書式について


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

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門




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


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


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