絶対参照と相対参照の違い
セルを参照する場合、絶対参照と相対参照の2つの方法があります。
絶対参照
絶対参照とは、A1セルや範囲選択A2~B5などのセル位置が決まっている部分を参照することを指します。
相対参照
相対参照とは、アクティブセルやA1セルから1つ右のセル、などのように、基準となるセルがあった上でそこから離れたセルを参照することを指します。
Offsetプロパティ
相対参照を行うにはOffsetプロパティを使います。隣のセルの参照方法については「VBAで隣のセルを参照する(Offset)」に詳しく書いています。
Offsetプロパティは、基準セルとなる「親オブジェクト」と、Offsetプロパティの引数に「行方向の移動数」と「列方向の移動数」を使います。
親オブジェクト
親オブジェクトとして基準となるセルのRangeオブジェクトを指定しなければなりません。
このときのRangeオブジェクトは単一セルでも複数セルでも構いません。基準となるRangeオブジェクトが単一セルの場合のOffset先は単一セルになり、複数セルの場合はOffset先も複数セルになります。
行方向の移動数
基準セルから行方向(縦方向)の移動数を指定します。省略可能です。
下方向に移動する場合は正数、上方向に移動する場合は負数を指定します。
省略した場合は移動数0として扱います。
列方向の移動数
基準セルから列方向(横方向)の移動数を指定します。省略可能です。
右方向に移動する場合は整数、左方向に移動する場合は負数を指定します。
省略した場合は移動数0として扱います。
単一セルのOffset
このコードはB2セルを選択した状態で、右と下に2セル移動したD4セルを選択します。
1 2 3 4 5 6 7 8 |
Sub OffsetTest1() Dim r As Range Set r = Range("B2") r.Select r.Offset(2, 2).Select End Sub |
複数セルのOffset
このコードはB2からC3セルを選択した状態で、右と下に2セル移動したD4からE5セルの複数セルを選択します。
1 2 3 4 5 6 7 8 |
Sub OffsetTest2() Dim r As Range Set r = Range("B2:C3") r.Select r.Offset(2, 2).Select End Sub |
行方向と列方向の移動数省略時の書き方
Offsetプロパティの行方向の移動数を省略する場合は以下のように書きます。
1 |
Range("A1").Offset(, 1).Select |
列方向の省略時は以下のように書きます。
1 |
Range("A1").Offset(1).Select |
ただし、省略せずに0を書いた方が分かりやすいのでOffset(0, 1)やOffset(1, 0)のように0を書くことをお勧めします。
範囲外の移動先を指定した場合はエラーになる
シートの行と列には上限と下限があります。
Excel2007以降であれば1行目から1048576行目まで、1列目から16384列目が利用可能範囲になります。
その範囲外をOffsetプロパティで指定した場合は、実行時エラー1004になります。