繰り返し【Do While】

VBAでは繰り返しのステートメントは大きく分けて3つほどあります。
今まではForFor Eachを紹介しましたが、今回はDo Whileを紹介します。

Do While

では早速簡単な例を出してみましょう。

例)Dim s As Integer
   s = 1
   Do While s < 11
       Cells(s, 1).Value = s
       s = s + 1
   Loop

Dim s As Integer
s = 1
この二つはもうわかりますよね?
sというInteger型の変数に1を代入しています。

Do While s < 11


このDoが繰り返しの始まりになります。
次のWhileは繰り返しを終了させる条件を記載する場所になります。
このコードでは【s < 11】が繰り返しの終了条件になり、この繰り返しの条件がTrue(真)になった時点で繰り返しが終了します。
なのでsの値が11になった時点で、Whileの条件がTrue(真)になるので、繰り返しが終了します。
つまり、繰り返しの回数は10回という事になります。

Cells(s, 1).Value = s


これも今まで何度かやりましたね。
「s行目、1列目のセルにsに代入されている値を入れる」という処理です。

s = s + 1


これが意外と抜けやすいところです。
今までのForFor Eachでは「ここから、ここまで 」と繰り返しの範囲を決めていましたよね?
例えばFor s = 1 To 10とすると、「自動でsの値が+1ずつしていき、10になると終わる」というようになっていました。

ですが、Doの場合、Whileの後の条件がTrue(真)になるまで繰り返します。
ということはDoではsの値を+1するという事はしないのです。
その為、自分で変数sに、今変数sに入ってる値+1しないとsはいつまで経っても1のままなので終わることが出来ません。
なので、【s = s + 1】が必要になります。

Loop


繰り返しの上の枠が【Do】であるように【Loop】は繰り返しの下の枠になります。
つまりDo~Loopまでの範囲が繰り返しの対象になりますので、「Doに戻ってください」の意味になります。

この【Do】のコードを簡単にまとめると「s行、1列目のセルにsに代入されてる値を、sが11になるまで繰り返す」と言う事になります。

またWhileに関してはDoの後、もしくはLoopの後のどちらかに記載をします。
Doの後にWhileを記載すると繰り返しに入る前に条件を確認し、Loopの後にWhileを記載すると処理が終わった後に条件を確認します。

その為、条件に合わなかった時、処理を始めたい場合はDoの後にWhileを記載します。
逆に1回目の処理を実行した後に条件に合わなければ繰り返したい時、Loopの後にWhileを記載します。

このDo While~LoopやDo~Loop Whileを上手く利用する事で、特定のセルまで繰り返したり、文字列などからセルを検索したりも出来るようになります。
また、IEの読み込み待ちにも、このDo Whileが使われています。

練習問題

では最後に練習問題
1.ExcelのA列、どこでもいいので好きな文字を入れてください。
2.自分でDoを使ってA列に入れた文字の上まで何かの文字を入れて繰り返しをしてみてください。

Do

コード実行後はこのようになれば正解です。
また、実際のコードは次回の繰り返し【Do Until】に記載します。