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ステートメントで処理をするコードの前に戻ります。
これの繰り返しです。
コードはこちら
Sub macro110814a() Dim i As Integer |
実行前のシート:
このシートに上のコードを実行すると
次のようになります。
最後のIf文の条件を r < 11 に変更すれば、
処理を10行目までするようになります。
このように繰り返すかの条件を変更することで
応用できます。
| 固定リンク
この記事へのコメントは終了しました。

コメント