特定のセルに対していくつ下のセルを参照したいだとか、選択したセルのいくつ右にコピーしたいだとか、そういったニーズに応えるのがOffsetプロパティです。
座標の指定はCellsと同じく数字となります。左右のセルを指定したい場合は、Next、Previousプロパティでも可能です。
上下左右のセルを操作・参照する方法
セルの上下左右の値を取得/代入
対象.Offset(値1,値2)
※値1が上がると下、値2が上がると右
対象.Offset(値1,値2)
※値1が上がると下、値2が上がると右

Aブロック、Bブロック、Cブロックがあるとして、

各ブロックの左上を選択してマクロを実行すると、ブロックまるごとD1~E2にコピーされる、というものを作ります。

まずブロックの左上だけであれば、これはCopyメソッドでActiveCell.copy Range(”D1″)と記述すれば事たります。

実行結果です。

次に、ActiveCell.Offset(1,0).copy Range(”D1″).Offset(1,0)と記述してみると、

アクティブセルのひとつ下のセルが、D1のひとつ下のセルにコピーされます。

D1のひとつ下というのはつまりD2なので、送り先はD2にしておきます。

ActiveCell.Offset(0,1).copy Range(”E1″)と書けば、

アクティブセルのひとつ右のセルが、E1にコピーされます。
つまりOffsetの数字はそれぞれ、Rangeオブジェクトの下にいくつずれるか、右にいくつずれるかを指定しています。
つまりOffsetの数字はそれぞれ、Rangeオブジェクトの下にいくつずれるか、右にいくつずれるかを指定しています。

というわけで、最後に右下もOffset(1,1)で指定してやれば、

こうなります。念のため数字もつけました。

Bブロックの左上を選択して実行すれば、ちゃんとBブロックがコピーされます。

下と右だけ見ましたが、値をマイナスにしてやれば上と左も操作できます。

たとえばこのようなコードを実行すると、

こういった結果になります。
' vba
ActiveCell.Offset(-1, 0).Value = "上"
ActiveCell.Offset(1, 0).Value = "下"
ActiveCell.Offset(0, -1).Value = "左"
ActiveCell.Offset(0, 1).Value = "右"

やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ

関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。
コメント