この記事を読むのに必要な時間は約 7 分です。
VBA入門、何回も繰り返し処理させる書き方です。
For文と並んでよく使われるループに、DoWhileやDoLoopがあります。
プログラムの書き方によって、なぜかループに入らない!
なんてこともあるかもしれません。
必ずしも思った通りには動かず、書いた通りにしか動かないのがプログラミング。
出来るだけ思い通りに動かせるよう、Do Whileの書き方を覚えていってくださいね。
目次(リンク)
Do Whileでループする書き方
Do While の場合、知っておくことはこの3つ。
- i = i +1などでインクリメントする
- Whileを先に書くと1回も実行されない場合もある
- Whileを後に書くと必ず1回は実行される
Excelのシートに、C3セルから10日分の日付を入れました。
ループさせてセルの値を表示させてみたいと思います。
Whileが先の場合
処理の書き方はこうなります。
Do While 条件
処理内容
Loop
Debug.Print で値を表示出来ます。
変数iにセルの値をつなげて表示するよう書きました。
F5キーで実行してみましょう!
ソースコードはこちら。
Len(Sheets(“Sheet1”).Cells(i, 3)) > 0
セルに入っている文字列の長さが0より大きい間実行されます。
i = i + 1 のように、1ずつ大きくさせる処理を入れています。
これが無いと、永遠に条件式を満たすまま、いつまでたっても処理が止まりません。
必ず入れるようにしてくださいね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Public Sub DoWhile1() Dim i As Integer i = 3 Do While Len(Sheets("Sheet1").Cells(i, 3)) > 0 Debug.Print i & " " & Sheets("Sheet1").Cells(i, 3) i = i + 1 Loop End Sub |
C3からC12のセルに入っていた値が表示されました。
でもこのように、最初のセルが空欄だとどうなるでしょうか。
ブレイクポイントを入れて、F5キーで実行してみます。
ループに入らず、End Subまで行きました。
最初に条件がある場合、処理されないこともあるわけです。
私自身、意図した回数より処理が1回少なかったり、逆に1回多すぎたこともよくありました。
Whileを前に書くか後ろに書くかは、思った通りに動かない場合の原因の1つだったりします。
Whileを後に書く場合
今度は条件を後ろに持ってきました。
Do
処理内容
Loop While 条件
まずは、C3セルに値が入っている場合で実行してみます。
これもセルに入っている文字列の長さが0より大きい間実行されますが、ループ内の処理を実行した後に条件式が書かれているところが違います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Public Sub DoWhile2() Dim i As Integer i = 3 Do Debug.Print i & " " & Sheets("Sheet1").Cells(i, 3) i = i + 1 Loop While Len(Sheets("Sheet1").Cells(i, 3)) > 0 End Sub |
最初と同じように、全部表示されました。
今度はC3セルを空欄にして動かしてみます。
最初のセルが空欄なのに、ループの中の処理が実行されました。
Do Loopでループする書き方
Whileで条件を書かないやり方です。
- こちらも、i = i +1 でインクリメントする
- Whileが無いので、ループを抜ける条件を絶対付ける
ループを抜ける条件が無いと、無限にループ内の処理を実行してしまいます。
IF文で、iが12を超えた時ループを抜けるよう書きました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Public Sub DoLoop1() Dim i As Integer i = 3 Do Debug.Print i & " " & Sheets("Sheet1").Cells(i, 3) i = i + 1 If i > 12 Then Exit Do Loop End Sub |
実行してみると、結果としては最初のDoWhileと同じように12までループして表示されました。
少しソースコードを変えて、ループを抜ける条件をiが15を超えた場合にしてみます。
セルの値など関係なく、i = 15まで実行されました。
Do While Loop とFor Next、どちらを使ったほうがいいの?
For文は何回ループさせるのか、ある程度はっきりしているときに使いやすいです。
For i = 1 to 10 とか、For i = 1 to Worksheets.Count のように、どこまでループさせるのか指定できます。
でもどこまでループさせるのか、回数が分からなかったらどうでしょうか。
DoWhileの場合、回数は分からないけど、条件を満たしている間ループするんです。
なので、空欄のセルが出てくるまで続けるとか、この値を超えるまで続けるといった条件を指定できます。
まとめ:Do While、Do Loopでループさせる書き方
Do~を使ったループの書き方と、For文との使い分けでした。
Whileを前に付けるか後ろに付けるかで、場合によっては実行されなかったり、余計に多く動くこともあります。
Whileを使わない場合は、IF文などでExit Doを入れて必ずループを抜ける条件が必要です。
どちらにしても、どうなったらループを抜けるのか、ハッキリさせておかないといけません。
無限にループすることが無いよう、注意してくださいね。
最後までお読みいただき、ありがとうございました。
Loops are used in programming to repeat a specific block of code. In this article, you will learn to create while and do … while loops in C programming. … How while loop works? The while loop evaluates the test expression. If the …
Thanks your comment.
I’m sorry my English is not good.
I checked your website of while loop.
Why you declared counter “i” as “i = 5”?
The loop will run while “i < 5"...