'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
このコードではセルを変数に代入して、それを更新していくことでセルの移動を行うループ方法です
画像のコードの動きを確認してください
最初にA2セルが代入されて、ループ処理により検証取得されたセルを最後に選択しています、A2から下方向に空白のセルを検索しているので、A4が選択されて終了しています
Dim セル As Range Set セル = Range("A2")
まずはセル変数の宣言と、初期位置の取得です
A2セルを取得させることで、この変数での初期位置とします
Do Until セル = "" ・・・ Loop
取得したセルが空白になるまでループを繰り返します
ただ、当然このままでは永遠にA2セルを参照し続けるので無限ループです
Set セル = セル.Offset(1, 0)
ここでセルを更新しています
セル変数に代入するセルは、その変数自体を指定することができます
このセル変数からOffsetを使用して1つ下のセルを代入させます
セル変数自体は、すでにブックやシートを含めたセルが取得されていますのでアクティブブックやシートである必要もありません
そして、ここでの代入によって次のセルが参照対象になるわけですが、セルへの参照が切り替わるだけでセル選択に関しては行っていませんので、メモリ上で処理が実行されています
なので整数型を使用した移動処理と差は感じられることは無いと思います
セル.Select
空白のセルが見つかったら、セルの更新が行われずにループを抜けるので
ループ後にそのセル変数を操作することが出来ます
別のシートのセル範囲を操作したいことは多いので、この方法を使用すればコードが非常にすっきりするので試してみてください