特定のセルに対していくつ下のセルを参照したいだとか、選択したセルのいくつ右にコピーしたいだとか、そういったニーズに応えるのがOffsetプロパティです。
座標の指定はCellsと同じく数字となります。左右のセルを指定したい場合は、Next、Previousプロパティでも可能です。
上下左右のセルを操作・参照する方法
セルの上下左右の値を取得/代入
対象.Offset(値1,値2)
※値1が上がると下、値2が上がると右
対象.Offset(値1,値2)
※値1が上がると下、値2が上がると右
![offset1](https://sunagitsune.com/wp-content/uploads/2020/05/offset1.jpg)
Aブロック、Bブロック、Cブロックがあるとして、
![offset2](https://sunagitsune.com/wp-content/uploads/2020/05/offset2.jpg)
各ブロックの左上を選択してマクロを実行すると、ブロックまるごとD1~E2にコピーされる、というものを作ります。
![offset3](https://sunagitsune.com/wp-content/uploads/2020/05/offset3.jpg)
まずブロックの左上だけであれば、これはCopyメソッドでActiveCell.copy Range(”D1″)と記述すれば事たります。
![offset4](https://sunagitsune.com/wp-content/uploads/2020/05/offset4.jpg)
実行結果です。
![offset5](https://sunagitsune.com/wp-content/uploads/2020/05/offset5.jpg)
次に、ActiveCell.Offset(1,0).copy Range(”D1″).Offset(1,0)と記述してみると、
![offset6](https://sunagitsune.com/wp-content/uploads/2020/05/offset6.jpg)
アクティブセルのひとつ下のセルが、D1のひとつ下のセルにコピーされます。
![offset7](https://sunagitsune.com/wp-content/uploads/2020/05/offset7.jpg)
D1のひとつ下というのはつまりD2なので、送り先はD2にしておきます。
![offset8](https://sunagitsune.com/wp-content/uploads/2020/05/offset8.jpg)
ActiveCell.Offset(0,1).copy Range(”E1″)と書けば、
![offset9](https://sunagitsune.com/wp-content/uploads/2020/05/offset9.jpg)
アクティブセルのひとつ右のセルが、E1にコピーされます。
つまりOffsetの数字はそれぞれ、Rangeオブジェクトの下にいくつずれるか、右にいくつずれるかを指定しています。
つまりOffsetの数字はそれぞれ、Rangeオブジェクトの下にいくつずれるか、右にいくつずれるかを指定しています。
![offset10](https://sunagitsune.com/wp-content/uploads/2020/05/offset10.jpg)
というわけで、最後に右下もOffset(1,1)で指定してやれば、
![offset11](https://sunagitsune.com/wp-content/uploads/2020/05/offset11.jpg)
こうなります。念のため数字もつけました。
![offset12](https://sunagitsune.com/wp-content/uploads/2020/05/offset12.jpg)
Bブロックの左上を選択して実行すれば、ちゃんとBブロックがコピーされます。
![offset13](https://sunagitsune.com/wp-content/uploads/2020/05/offset13.jpg)
下と右だけ見ましたが、値をマイナスにしてやれば上と左も操作できます。
![offset14](https://sunagitsune.com/wp-content/uploads/2020/05/offset14.jpg)
たとえばこのようなコードを実行すると、
![offset15](https://sunagitsune.com/wp-content/uploads/2020/05/offset15.jpg)
こういった結果になります。
' vba
ActiveCell.Offset(-1, 0).Value = "上"
ActiveCell.Offset(1, 0).Value = "下"
ActiveCell.Offset(0, -1).Value = "左"
ActiveCell.Offset(0, 1).Value = "右"
![](https://sunagitsune.com/wp-content/uploads/2018/10/gui-2311261_1280.png)
やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
![](https://sunagitsune.com/wp-content/uploads/2018/12/mathematics-1509559_1280-160x90.jpg)
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。
コメント