« 値によってセルを色分けする | トップページ | 時差の計算 »

2011年8月14日 (日)

Range オブジェクトのOffset プロパティの使い方

個人的に、
以前の記事『 虫食い 』で初めて使ったプロパティです。

存在は知っていたものの使いどころがわからず
使っていませんでした。

使い方は、例えば次のようになります。
左辺がOffsetの使い方、右辺がそれが返す範囲です。

Range("D5").Offset(1, 0) = Range("D6")
Range("D5").Offset(0, 1) = Range("E5")
Range("D5").Offset(1, 1) = Range("E6")
Range("D5").Offset(-1, 0) = Range("D4")
Range("D5").Offset(0, -1) = Range("C5")
Range("D5").Offset(-1, -1) = Range("C4")

相対的すぎて使う気がしないですが、
1行から順番に処理していくようなプロシージャで
For文の代用にできます。

For文だと最終行を取得しないといけませんが、
Offsetプロパティならそれは必要ないです。

流れは、 Range型の変数r を作ります。
rの行を指定する変数i も作成します。

最初のセルをrに入れるために

i = 1
set r = Cells(i, 1)

このようにします。

まず1行目の処理を変数r を使ってします。
同じ行の違う列のセルを指定するのにもOffsetを使います。

r.Offset(0, 1) = rと同じ行のB列
r.Offset(0, 2) = rと同じ行のC列

のように指定します。
1行目の処理が終わったら

i = i + 1

として次の行に進みます。
進んだセルが空白なら(途中に空白がないという前提)
終了します。

そうでないなら、
GoToステートメントで処理をするコードの前に戻ります。
これの繰り返しです。

コードはこちら

Offsetを使用するコード:

Sub macro110814a()
'Offsetを使用する

    Dim i As Integer
    Dim r As Range
    i = 1
    Set r = Cells(i, 1)
   
Step100:
    '処理
    r.Offset(0, 1) = r + 1
    r.Offset(0, 2) = r + 2
   
    '次 の行へ
    Set r = r.Offset(1, 0)
   
    '終了か繰り返しかの判定
    If r <> "" Then
        '繰り返し
        GoTo Step100
    End If
   
End Sub

実行前のシート:
Vba20110814a

このシートに上のコードを実行すると
次のようになります。
Vba20110814b

最後のIf文の条件を r < 11 に変更すれば、
処理を10行目までするようになります。
このように繰り返すかの条件を変更することで
応用できます。

|

« 値によってセルを色分けする | トップページ | 時差の計算 »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: Range オブジェクトのOffset プロパティの使い方:

« 値によってセルを色分けする | トップページ | 時差の計算 »