はい! いつも明るく楽しいこばとちゃんの VBA 講座です!
今日は Offset プロパティ でセルを 相対参照 する方法について解説します。簡単なマクロばかりだけど何事も基本が大切ですから、ゆめゆめおろそかにしないでくださいな。
Offsetプロパティでセルを相対参照します
まずは 相対参照 について簡単に説明しておきますよ。名前は厳めしいけど、別に難しいものではありません。VBA を使わなくても Excel で多用される概念だから「そんなの知ってるよ!」て人はここを読み飛ばしてくださいな。
普通は Excel でセルを指定するときに、"B3" とか "G11" のように、行をアルファベット、列を数字で表しますね。つまりワークシート全体の中でどの位置にあるかってことを指定するのです。この普通の指定方法を 絶対参照 という、これまた物々しい名前で呼んだりするのです。それに対して相対参照は、あるセルを自分で勝手に選んで、そこを基準に下方向(行方向)と、右方向(列方向)にそれぞれいくつ動いたかを指定するやりかたなのです。
Offsetプロパティは
という形で記述します。y は行方向(下方向)、x は右方向(列方向)への移動距離を表します。たとえばユーザーさんが適当に選んだセルを基準に下方向(行方向)に 2 つ、右方向(列方向)に 3 つだけ移動した場所を選択するには
'[VBA] C5の↓2→3を選択するマクロ
Sub Offset_Test_1()
Selection.Offset(2, 3).Select
End Sub
のように書きます。セル B2 を選んだ状態でこのマクロを実行すると、セル E4 が選択されます。
上方向や左方向に移動させる場合は引数に負の数を指定します。たとえばセル C5 を基準に2 つ上、2 つ右のセルを選択する場合は次のようなマクロを書きます。
'[VBA] セルC5の↑2→2を選択するマクロ
Sub Offset_Test_2()
Range("C5").Offset(-2, 2).Select
End Sub
このマクロを実行するとセル E3 が選択されます。
今度は選択範囲から下に 2 つずれた所にデータを入力するマクロです。
'[VBA] アクティブセル範囲の↓2を選択するマクロ
Sub Offset_Test_3()
Selection.Offset(2, 0).Value = "KOBATO"
End Sub
適当な範囲を選択して、これを実行すると KOBATO がずらずらと並びます。
え? こんな不気味なマクロを作るな? こばとの勝手でしょ!
引数は省略できるけど ......
あ、そうそう。あと最後にひとつだけ。Offsetプロパティは引数を省略した書き方もできます。たとえばセル C5 を基準に行方向(下方向)に 3 つ動かすけど、右方向(列方向)には動かさないよってときには
と書きますけど、列方向の引数を省略して
と書きます。また、行方向(下方向)には動かさないけど、右方向(列方向)に 3 つ動かしたいってとき、
と書くところを
のようにしてもかまわないけど ... 何か見た目が悪いし、他人が読みにくいし、こばと的にはこういう省略はなるべくしないほうがいいと思います。まあ好みの問題ですけどね。