HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > これだけはおさえるセル操作(1)−Offsetで自由自在

これだけはおさえるセル操作(1)−Offsetで自由自在|Excel VBA

セル操作関連のテクニック

これだけはおさえるセル操作(1)−Offsetで自由自在

(Excel 97/2000/2002/2003/2007/2010)

セル(範囲)に関する基本事項で、RangeとCellsをマスターしたら、Offsetの使い方をぜひおさえてください。

【基礎編】

Offsetは簡単にいえば、セル(範囲)の移動です。使い方は次のとおりです。

    Rangeオブジェクト.Offset(行方向,列方向)

例えば・・・

    ActiveCell.Offset(1, 0).Select

このコードはアクティブセルから行方向に1、つまり1つ下のセルを選択します。また、移動しない方向については省略可能ですから・・・

    ActiveCell.Offset(1).Select

でも同じです。ただし、移動しない方向の0を省略すると可読性が下がるというデメリットがあるので、Offset(1)やOffset(, 1)と書くこともできることだけ覚えておき、省略しないで書く方がよいでしょう。

下方向へ1つ移動の指定がOffset(1, 0)であるならば、上方向へはどうするのでしょうか?答えは素直に考えて、−(マイナス)表記にします。

    ActiveCell.Offset(-1, 0).Select

今度はActiveCellをSelectionに置き換えてみましょう。

    Selection.Offset(0, 2).Select

これは選択範囲を列方向に2、つまり右側へ2列選択範囲をずらします。
このとき、SelectionがセルA1からD5までのせる範囲をあらわしているとすれば、次のように書くことができます。

    Range("A1:D5").Offset(0, 2).Select

⇒ 実行するとセルC1からF5までのセル範囲を選択します。

【応用編】

基礎編でOffset(行方向,列方向)の指定の仕方がわかったら、今度はRangeの基本的な使い方と組み合わせてみます。
Rangeは、Range("A1") や Range("A1:D5")のような使い方のほか・・・

     Range(左上端,右下端)
     ※左上端、右下端ともにセル、もしくはセル範囲

というように、引数として2つのセル、またはセル範囲を指定することでセル範囲をあらわすことができました。これをOffsetと組み合わせて使う方法を検討します。

次のコードはアクティブセルから右方向へ5行移動したセルまでのセル範囲を結合します。

    Range(ActiveCell, ActiveCell.Offset(0, 5)).Merge

このコードはアクティブセルがA1であったとすると、A1からF1までのセルを結合していることになります。

次のコードは選択範囲を1行下まで拡張します。

    Range(Selection, Selection.Offset(1, 0)).Select

選択範囲がB5からE10までのセル範囲だったとすると、B5からE11までに拡張します。

例えばデータ入力シートに名前つきセル範囲があったとします。データ入力をするのですから当然範囲を拡張しなければならないケースが出てくるでしょう。
セル範囲につけえられた名称が”データ”で、名前の範囲を5行拡張する場合・・・

    Range(Range("データ"), Range("データ").Offset(5, 0)).Name = "データ"

となります。
ただし、Rangeオブジェクトにはセル範囲のサイズを変更するResizeプロパティが用意されているので、セル範囲の拡張はResizeプロパティで行うこともできます。

ここまでの知識を応用すれば、さまざまなことができますが、さらにRnageオブジェクトのプロパティやメソッドなどをマスターすることにより、より高度なことを行うことができるようになります。
例えば、特定の値をFindメソッドで検索し、検索されたセルの右隣へ指定の値を書き込む、などということも可能となるのです。