DoループでRangeオブジェクトを使用する

Doループを使用して、セルを移動させて検証していく際に、Range型の変数を利用する方法

'A2の下にある空白セルを選択する
Dim セル As Range
Set セル = Range("A2")

Do Until セル = ""
Set セル = セル.Offset(1, 0)
Loop
セル.Select

セル選択を減らすためには、RangeオブジェクトをForEachループで処理を行います
ただその処理は事前にセル範囲が分かっている場合に限定されます

今回の記事にある、空白のセルになるまで処理を繰り返す
というような、セル範囲ではなくセル単体を検証していくようなループではDoループで処理を行います

そして、その際にセルを選択することを無くすためには、コードにあるRange.OffsetプロパティやCellsオブジェクトなどで整数値を増減させて移動させます

この方法でセル選択は無くすことが出来るので、処理速度の向上は図れています

ただ、この方法での面倒な場合があります
それは別のシートやブックのセルを処理したい場合です
この場合には、シート名から指定する必要があり、コードが冗長になります
Withステートメントを使用する方法もいいのですが、あまり処理行が長い場合にはコードの可読性はあまり高くありません

そこで使用したいのが記事コードです

コードの解説

Dim セル As Range
Set セル = Range("A2")

Do Until セル = ""
Set セル = セル.Offset(1, 0)
Loop
セル.Select

このコードではセルを変数に代入して、それを更新していくことでセルの移動を行うループ方法です

DoループをRange型変数で実行した時の動き
コード実行によるセル選択

画像のコードの動きを確認してください
最初にA2セルが代入されて、ループ処理により検証取得されたセルを最後に選択しています、A2から下方向に空白のセルを検索しているので、A4が選択されて終了しています

Dim セル As Range
Set セル = Range("A2")

まずはセル変数の宣言と、初期位置の取得です
A2セルを取得させることで、この変数での初期位置とします

Do Until セル = ""

・・・

Loop

取得したセルが空白になるまでループを繰り返します
ただ、当然このままでは永遠にA2セルを参照し続けるので無限ループです

Set セル = セル.Offset(1, 0)

ここでセルを更新しています
セル変数に代入するセルは、その変数自体を指定することができます

このセル変数からOffsetを使用して1つ下のセルを代入させます

セル変数自体は、すでにブックやシートを含めたセルが取得されていますのでアクティブブックやシートである必要もありません

そして、ここでの代入によって次のセルが参照対象になるわけですが、セルへの参照が切り替わるだけでセル選択に関しては行っていませんので、メモリ上で処理が実行されています

なので整数型を使用した移動処理と差は感じられることは無いと思います

セル.Select

空白のセルが見つかったら、セルの更新が行われずにループを抜けるので
ループ後にそのセル変数を操作することが出来ます

別のシートのセル範囲を操作したいことは多いので、この方法を使用すればコードが非常にすっきりするので試してみてください