VBAでの変数の使用と繰り返しについて2

スポンサーリンク

VBAでの繰り返しのコード

前回に引き続き変数と繰り返しを書きます。今回の内容は前回のFor~Next構文の復習とともう一つのDo until~Loop構文を紹介します。

前回作成したVBAコード

前回作成したコードは以下のようになります。
1行目から6行目までB列のセルが80以上ならA列を黄色に塗るというコードです。

Sub 繰り返し実行
Dim i’変数としてiを使う
For i = 1 to 6’iを1から6まで順に増やす
If Cells(i,2) >= 80 Then’(i,2)セルが80以上なら
Cells(i,1).Interior.ColorIndex = 6’(i,1)セルを黄色に塗る。
End If’Ifの作業を終了する。
Next i’繰り返す。
End Sub

スポンサーリンク

For~Next構文のデメリット

色々なファイル、シートに対してプログラムを実行するVBAを作成する場合には、様々な状況を想定してコードを考える必要があります。

For~Next構文を使う際は何行目から何行目という範囲が決まっている場合は有効ですが、VBAを実行するシートやファイルによって行数が違う場合にはうまく動かない場合があります。For i = 1 to 10000などのように指定する範囲を広くし、できるだけたくさんの繰り返しを実行するようにしておくのも対策ですが、そうするとVBAの実行速度が遅くなります。

今回は色んな行の長さの元ファイルでも実行できるようにもう一つの繰り返し方法であるDo Until~Loop構文についてお伝えします。

Do Until~Loop構文

ある条件を満たすまでの間繰り返す処理を行うにはDo Until~Loop構文を用います。
(ある条件を満たす間繰り返すのはDo While~Loop構文を用います。私はあまり使用しないので、また機会があるときにお伝えします。)

前回の1行目から6行目までB列の数字によって色を分ける操作を1行目から開始して、A列に文字がなくなるまで続けるVBAのコードは以下のようになります。

Sub 繰り返し実行2
Dim i’①変数としてiを使う
i = 1’②iが1からスタートすることを記載
Do Until Cells(i,1).Value=””’③Cells(i,1)が空欄になるまで続ける
If Cells(i,2) >= 80 Then’(i,2)セルが80以上なら
Cells(i,1).Interior.ColorIndex = 6’④(i,1)セルを黄色に塗る。
End If ’⑤Ifの作業を終了する。
i = i +1’⑥iを1つずつ増やす
Loop’⑦繰り返す
End Sub

以上の流れになります。
⑥は”i = i + 1”としているので、1行ずつ順に処理を行いますが、”i = i + 2”とすると1行飛ばしで処理が進みます。
記載を忘れると同じところを繰り返して、止まらなくなるので注意が必要です。
無限ループになってしまった場合の実行しているVBAコードの中断方法はまた別の機会にお伝えします。

おすすめ書籍 (広告)

コメント