『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

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

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

【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

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

コメント