今回はDo WhileとDo Untilの使い分けについて紹介したいと思います。私自身よく「どっちがどっちだっけ?」となるので備忘録がてら残しておきたいと思います。
もし、私と同じような悩みを持つ方がいれば是非覚えておいていただければと思います。
過去にVBAに関する記事を投稿していますので、是非こちらも併せてご覧ください!
Do~Loopステートメントとは
そもそも「Do~Loopステートメントとは何ぞや」という方に向けてざっくり説明します。
Do~Loopステートメントとは簡単に言うと繰り返し処理になります。その名前の通り処理を繰り返し行う為に使用します。また、これに似たような繰り返し処理にforステートメントがあります。
例えば1から10まで足して結果を出力したい場合があったとします。1+2+3…+10のように足す場合です。
ここで繰り返し処理を使わない場合、以下のようになります。
'一例
Sub test_total()
Dim i As Long
i = i + 1
i = i + 2
i = i + 3
i = i + 4
i = i + 5
i = i + 6
i = i + 7
i = i + 8
i = i + 9
i = i + 10
MsgBox i '結果:55
End Sub
実行すると以下のようにメッセージボックスに計算結果が表示されます。
一応あってはいるのですが、2点ほど問題があります。それが
- 単純にコードに無駄が多い
- 1から10→1から1000になったりしたら、直すのが大変
という点です。
単純にi = i + 1,i = i + 2…と似たような記述ですし、何より1から10だったのが1から1000に増えた場合、増えた分だけ入力しなおさなければいけなくなってしまいます。
じゃあどうすればいいの?
となると思いますが、ここで繰り返し処理を使うと上記の問題を解決することができます。
繰り返し処理を使えば以下のように書くことができます。
Sub test_sum()
Dim i As Long
Dim cnt As Long
cnt = 0
i = 1
Do Until i = 11
cnt = cnt + i
i = i + 1
Loop
MsgBox cnt '結果:55
End Sub
このように繰り返し処理を使えば、i = i + 1,i = i + 2,…と全て書く必要がなくなりますし、何よりi = 11の数字部分だけ変えれば、繰り返したい回数を簡単に変えることができます。
Do WhileとDo Untilの違い
Do~LoopステートメントにはDo WhileとDo Untilの2つがあります。
それぞれどう違うの?
という方もいると思うので、Do WhileとDo Untilの違いについてざっくり言っておくと、
- Do While→条件を満たさなくなるまで
- Do Until→条件を満たすまで
が違いになります。
これだけだとピンと来ないと思いますので、それぞれ例を交えて説明します。
Do Whileの使い方・意味
はじめにDo Whileの場合について説明します。例として使用するコードは以下の通りです。
Sub inputCells_While()
Dim MySht As Worksheet
Dim i As Long
Set MySht = ThisWorkbook.ActiveSheet
With MySht
i = 1
Do While i <= 10
.Cells(i, 1) = i & "匹のワンコ"
i = i + 1
Loop
End With
End Sub
上記コードを実行すると、現在アクティブになっているシートに以下のように入力されます。1列目に1匹のワンコ,2匹のワンコ,3匹のワンコ…のように入力されます。
コードのポイントは以下の部分になります。
i = 1
Do While i <= 10
.Cells(i, 1) = i & "匹のワンコ"
i = i + 1
Loop
Do Whileは条件を満たさなくなるまで繰り返すので今回の場合、iの値が10以下である間繰り返す(iが11になった時点で処理を抜ける)、ということになります。
Do Untilの使い方・意味
次にDo Untilの場合について説明します。コードは以下の通りです。
Sub inputCells_Until()
Dim MySht As Worksheet
Dim i As Long
Set MySht = ThisWorkbook.ActiveSheet
With MySht
i = 1
Do Until i > 10
.Cells(i, 3) = i & "匹のワンコ"
i = i + 1
Loop
End With
End Sub
コードを実行すると、Do Whileと同じように入力されます。
Do Untilは条件を満たすまで繰り返すので今回の場合、iの値が10より上になるまで繰り返す(iが11になった時点で処理を抜ける)、ということになります。
Do~Loopステートメントを使う上で気を付けておきたいこと
Do~Loopステートメントを使う上で気を付けておきたいことは、処理中にインクリメント(増分、1ずつ増やす) or デクリメント(減分、1ずつ減らす)を必ず行うことです。今回で言うと
i = i + 1
のところです。大体の場合、1ずつ加算することが多いです。
Do~Loopステートメントは自動でインクリメント or デクリメントすることはないので、書き忘れたまま実行してしまうと処理が終わらず、無限ループになってしまいます。
Do~Loopを使う際は必ずインクリメント or デクリメントするようにし、処理が終わるように気を付けましょう!
まとめ
今回はDo WhileとDo Untilの使い分けについて紹介しました。
繰り返し処理はVBAに限らずどの言語でも必ず使う内容になるので、これを機に是非覚えていただければと思います!
また、VBAに関する投稿を随時更新していますので、こちらも是非ご覧ください!
コメント