はい! いつも明るく楽しいこばとちゃんの 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 が選択されます。
上方向や左方向に移動させる場合は引数に負の数を指定します。たとえばセル C5 を基準に2 つ上、2 つ右のセルを選択する場合は次のようなマクロを書きます。
'[VBA] セルC5の↑2→2を選択するマクロ Sub Offset_Test_2() Range("C5").Offset(-2, 2).Select End Sub
Offset_Test_2() を実行するとセル E3 が選択されます。
今度は選択範囲から下に 2 つずれた所にデータを入力するマクロです。
'[VBA] アクティブセル範囲の↓2を選択するマクロ Sub Offset_Test_3() Selection.Offset(2, 0).Value = "KOBATO" End Sub
適当な範囲を選択して Offset_Test_3() を実行すると KOBATO がずらずらと並びます。
え? こんな不気味なマクロを作るな? こばとの勝手でしょ! あ、そうそう。あと最後にひとつだけ。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
のようにしてもかまわないけど … 何か見た目が悪いし、他人が読みにくいし、こばと的にはこういう省略はなるべくしないほうがいいと思います。まあ好みの問題ですけどね。
コメント