【Excel VBA】忘れがちなDo WhileとDo Untilの使い分け【Do~Loop】

Excel
スポンサーリンク

今回は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

実行すると以下のようにメッセージボックスに計算結果が表示されます。

Do~Loopステートメントとは_例_1

一応あってはいるのですが、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 WhileDo 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匹のワンコ…のように入力されます。

Do While_処理結果_1

コードのポイントは以下の部分になります。

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_処理結果_1

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に関する投稿を随時更新していますので、こちらも是非ご覧ください!

コメント

タイトルとURLをコピーしました