構文
Range.Offset(RowOffset , ColumnOffset)
RowOffset・・・・指定したセル範囲の行の相対的な位置を指定する 【省略可能】
ColumnOffset・・ 指定したセル範囲の列の相対的な位置を指定する 【省略可能】
ColumnOffset・・ 指定したセル範囲の列の相対的な位置を指定する 【省略可能】
RangeやCellsを理解したら、セル範囲を相対的に指定するオフセットの概念を理解しましょう。
セル範囲を相対的に指定するOffsetプロパティのサンプルコード
Public Sub sample() '■通常のOffset Debug.Print Range("A1").Offset(1, 1).Address '$B$2 A1から「下に1」「右に1」移動する Debug.Print Range("A1").Offset(1, 0).Address '$A$2 A1から「下に1」「右に0」移動する Debug.Print Range("A1").Offset(0, 1).Address '$B$1 A1から「下に0」「右に1」移動する '■マイナス値や省略した場合 Debug.Print Range("C3").Offset(1).Address '$C$4 C3から「下に1」「右に0」移動する(見づらいので1,0と指定した方がよい) Debug.Print Range("C3").Offset(, 1).Address '$D$3 C3から「下に0」「右に1」移動する(見づらいので0,1と指定した方がよい) Debug.Print Range("C3").Offset(-1, -1).Address '$B$2 C3から「上に1」「左に1」移動する '■エラーが発生するケース 実行時エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです Debug.Print Range("A1").Offset(-1, 1).Address 'A1から左に1は移動できない '■複数セル指定した場合 Debug.Print Range("A1:A3").Offset(1, 3).Address '$D$2:$D$4 A1:A3から「下に1」「右に3」移動した複数セル範囲 End Sub
注意点
- 今回はシート名などは明示していませんのでActiveSheetから取得します。
- 別のシートや別のブックのセル範囲を取得する場合は、Worksheetsを事前に指定しましょう。
ワークシート名を変数にSetし、短い名前で利用する【マクロ初級者必読】 - 結合セルがある場合は、結果が異なりますのでご注意ください。
関連記事
選択しているセルの表範囲を取得する【CurrentRegionプロパティ】【ExcelVBA】
ヘッダー行(見出し)を除いて表範囲を取得する【CurrentRegion応用】【ExcelVBA】
セルの結合は厄介?結合で実行結果が異なる【エクセルマクロ】
コメント