アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

今度こそ覚えるOffset

作るモノの仕様によっては絶対に覚えておいたら楽になるOffsetなのですが、いかんせん今までOffsetを使うような機会があまりなく
たまに使うと毎回調べてしまっているのでいい加減理解しようとしてみました。

文法

Rangeオブジェクト.Offset(行方向の移動値, 列方向の移動値)

これ自体をRangeオブジェクトとして扱うことができる。

つまり

'アクティブセルがB2セルになる
Range("A1").Offset(1, 1).Select

'選択範囲がB2:C3になる
Range("A1:B2").Offset(1, 1).Select

'選択範囲がC1:D2になる
Range("B2:C3").Offset(-1, 1).Select

'エラー
Range("A1:B2").Offset(-1, 1).Select

…つまり?

基本「Rangeオブジェクト.Offset()」もまたRangeオブジェクトである、
ということさえ理解すれば何も問題ない気がしてきました。

'1セルずつ移動しながら値をセットする書き方の例(Offset不使用 / Offset使用)
Dim i As Long
For i = 0 To 9
    ' 1列目に1~10の数字
    ThisWorkbook.Sheets("Sheet1").Cells(1 + i, 1).Value = 1 + i
    ' 2列目に1~10の数字
    ThisWorkbook.Sheets("Sheet1").Cells(1, 2).Offset(i, 0).Value = 1 + i
Next