【VBA】Offsetプロパティでセルを相対参照します

 はい! いつも明るく楽しいこばとちゃんの VBA 講座です!
 この記事では、VBA の Offset プロパティ を使って、セルを 相対参照 する方法について解説します。簡単なマクロばかりだけど何事も基本が大切ですから、ゆめゆめおろそかにしないでくださいな。

【VBA】Offset プロパティ

 まずは 相対参照 について簡単に説明しておきますよ。名前は厳めしいけど、別に難しいものではありません。VBA を使わなくても Excel で多用される概念だから「そんなの知ってるよ!」て人はここを読み飛ばしてくださいな。

 普通は Excel でセルを指定するときに、”B3″ とか “G11” のように、行をアルファベット、列を数字で表しますね。つまりワークシート全体の中でどの位置にあるかってことを指定するのです。この普通の指定方法を 絶対参照 という、これまた物々しい名前で呼んだりするのです。それに対して相対参照は、あるセルを自分で勝手に選んで、そこを基準に下方向(行方向)と、右方向(列方向)にそれぞれいくつ動いたかを指定するやりかたなのです。

 Offsetプロパティ

Offset(y,x)

という形で記述します。y は行方向(下方向)、x は右方向(列方向)への移動距離を表します。たとえばユーザーさんが適当に選んだセルを基準に下方向(行方向)に 2 つ、右方向(列方向)に 3 つだけ移動した場所を選択するには

'[VBA] C5の↓2→3を選択するマクロ
Sub Offset_Test_1()
  Selection.Offset(2, 3).Select
End Sub

のように書きます。セル B2 を選んだ状態で Offset_Test_1() を実行すると、セル E4 が選択されます。

 Offsetプロパティでセルを相対参照①

 上方向や左方向に移動させる場合は引数に負の数を指定します。たとえばセル C5 を基準に2 つ上、2 つ右のセルを選択する場合は次のようなマクロを書きます。

'[VBA] セルC5の↑2→2を選択するマクロ
Sub Offset_Test_2()
  Range("C5").Offset(-2, 2).Select
End Sub

 Offset_Test_2() を実行するとセル E3 が選択されます。

 Offsetプロパティでセルを相対参照

 今度は選択範囲から下に 2 つずれた所にデータを入力するマクロです。

'[VBA] アクティブセル範囲の↓2を選択するマクロ
Sub Offset_Test_3()
  Selection.Offset(2, 0).Value = "KOBATO"
End Sub

 適当な範囲を選択して Offset_Test_3() を実行すると KOBATO がずらずらと並びます。

 VBAのOffsetプロパティで位置をずらして文字を書き込みます

 え? こんな不気味なマクロを作るな? こばとの勝手でしょ! あ、そうそう。あと最後にひとつだけ。Offsetプロパティは引数を省略した書き方もできます。たとえばセル C5 を基準に行方向(下方向)に 3 つ動かすけど、右方向(列方向)には動かさないよってときには

Range("C5").Offset(3, 0).Select

と書きますけど、列方向の引数を省略して

Range("C5").Offset(3).Select

と書きます。また、行方向(下方向)には動かさないけど、右方向(列方向)に 3 つ動かしたいってとき、

Range("C5").Offset(0, 3).Select

と書くところを

Range("C5").Offset(, 3).Select

のようにしてもかまわないけど … 何か見た目が悪いし、他人が読みにくいし、こばと的にはこういう省略はなるべくしないほうがいいと思います。まあ好みの問題ですけどね。

コメント

タイトルとURLをコピーしました