空白セルまでループ

業務用のVBAでよく使うのが「空白セルまでループ」です。このサイトでもいろんなページで書いてます。

ここでは「空白セルまでループ」を中心に書いていますので、「空白セルかどうか」自体の判定方法についての詳細は「VBAで空白セルを判定する方法」をご参照ください。

コードでは以下が基本形になります。

上のコードはアクティブセルを基準としてループでOffsetを使ってセル座標を1行ずつ下にずらしています。事前にアクティブセルをA1に設定しています。

行ではなく列を右にずらしたい場合は「Offset(0, i)」と引数の行と列を入れ替えるだけです。

セル値が未設定かどうかを「If s = “” Then」と書いていますが、これは「If IsEmpty(s) = True Then」と書いても結果は同じになります。


セル範囲を空白セルまでループ

上のコードはアクティブセルを指定して、そこから行を下に向かって空セルまでループしていますが、例えばA1セルからA100セル範囲の中のようにセル範囲の中で空セルまでループしたい場合があります。

その場合は以下のようなループ構文になります。

For EachでA1からA100のセル範囲をループし、ループごとに対象の1セルをRangeオブジェクトで取得します。

取得したRangeオブジェクトのセル値をValueプロパティで取得し、あとは最初のコードと同じでセル値が未設定かどうかの判定を行います。


空白セルがある程度連続しているとループ終了する方法

最初に紹介したコードですが、空白セルまでループするということは、値が無ければ処理終了、ということになります。

ここで困るのが「1行ずつ空行があるフォーマットを使っている」場合とかです。こういう場合は空白セルがあると途端に止まってしまいます。しかしそれでは困ります。

そこで、空白セルがある程度連続していたら処理を終了するようにします。

1つ目のサンプルがベースになっていますが、空白セルが連続で何回繰り返したのかを数えるための変数を追加しています。

この空白セルカウンタ変数が10回を超えていたら、それ以降は空白セルしかないとみなしてループを抜けるようにしています。セルに値が入っていれば空白セルカウンタを0に初期化しています。

このようにすれば1行ずつ空白セルがあるようなフォーマットの場合でも対応が可能になります。