この記事を読むのに必要な時間は約 7 分です。

 

VBA入門、何回も繰り返し処理させる書き方です。

 

For文と並んでよく使われるループに、DoWhileやDoLoopがあります。

 

プログラムの書き方によって、なぜかループに入らない!
なんてこともあるかもしれません。

 

必ずしも思った通りには動かず、書いた通りにしか動かないのがプログラミング。

 

出来るだけ思い通りに動かせるよう、Do Whileの書き方を覚えていってくださいね。

Do Whileでループする書き方

Do While の場合、知っておくことはこの3つ。

  • i = i +1などでインクリメントする
  • Whileを先に書くと1回も実行されない場合もある
  • Whileを後に書くと必ず1回は実行される

 

Excelのシートに、C3セルから10日分の日付を入れました。

 

ループさせてセルの値を表示させてみたいと思います。

VBA_DoWhile文

Whileが先の場合

処理の書き方はこうなります。

 

Do While 条件

処理内容

Loop

 

Debug.Print で値を表示出来ます。
変数iにセルの値をつなげて表示するよう書きました。

 

F5キーで実行してみましょう!

VBA_DoWhile文

 

ソースコードはこちら。

 

Len(Sheets(“Sheet1”).Cells(i, 3)) > 0
セルに入っている文字列の長さが0より大きい間実行されます。

 

i = i + 1 のように、1ずつ大きくさせる処理を入れています。
これが無いと、永遠に条件式を満たすまま、いつまでたっても処理が止まりません。

 

必ず入れるようにしてくださいね。

 

C3からC12のセルに入っていた値が表示されました。

VBA_DoWhile文

 

でもこのように、最初のセルが空欄だとどうなるでしょうか。

VBA_DoWhile文

 

ブレイクポイントを入れて、F5キーで実行してみます。

VBA_DoWhile文

 

ループに入らず、End Subまで行きました。

VBA_DoWhile文

最初に条件がある場合、処理されないこともあるわけです。

 

私自身、意図した回数より処理が1回少なかったり、逆に1回多すぎたこともよくありました。
Whileを前に書くか後ろに書くかは、思った通りに動かない場合の原因の1つだったりします。

Whileを後に書く場合

今度は条件を後ろに持ってきました。

 

Do

処理内容

Loop While 条件

 

まずは、C3セルに値が入っている場合で実行してみます。

VBA_DoWhile文

 

これもセルに入っている文字列の長さが0より大きい間実行されますが、ループ内の処理を実行した後に条件式が書かれているところが違います。

 

最初と同じように、全部表示されました。

VBA_DoWhile文

 

今度はC3セルを空欄にして動かしてみます。

 

最初のセルが空欄なのに、ループの中の処理が実行されました。

VBA_DoWhile文

 

Do Loopでループする書き方

Whileで条件を書かないやり方です。

  • こちらも、i = i +1 でインクリメントする
  • Whileが無いので、ループを抜ける条件を絶対付ける

 

ループを抜ける条件が無いと、無限にループ内の処理を実行してしまいます。

 

IF文で、iが12を超えた時ループを抜けるよう書きました。

VBA_DoWhile文

 

 

実行してみると、結果としては最初のDoWhileと同じように12までループして表示されました。

VBA_DoWhile文

 

少しソースコードを変えて、ループを抜ける条件をiが15を超えた場合にしてみます。

 

セルの値など関係なく、i  = 15まで実行されました。

VBA_DoWhile文

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を入れて必ずループを抜ける条件が必要です。

 

どちらにしても、どうなったらループを抜けるのか、ハッキリさせておかないといけません。
無限にループすることが無いよう、注意してくださいね。

 

最後までお読みいただき、ありがとうございました。