特定のセルに対していくつ下のセルを参照したいだとか、選択したセルのいくつ右にコピーしたいだとか、そういったニーズに応えるのが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やメソッドの諸機能を、機能の名称から探せるまとめ記事です。
コメント