K-fix Learning & Playing

基礎編


ループ処理の操作

これまでループに関して、For~Nextステートメントを紹介しました。しかし、条件で分岐させてループさせるには、Do  Loopステートメントを使います。これは、繰り返し回数を指定するというより、一定の条件が満たされるまでの間、もしくは一定の条件が満たされない間、処理を繰り返す処理を行います。
これには4つのパターンがあります。

構文 意味
Do While ~ Loop 条件が真の間は繰り返し実行。
Do ~ Loop While 条件が真の間は繰り返し実行。但し、条件が偽であっても1回だけは処理を行う。
Do Until ~ Loop 条件が偽の間は繰り返し実行。
Do ~ Loop Until 条件が偽の間は繰り返し実行。但し、条件が真であっても1回だけは処理を行う。

では、全部はご紹介しませんが、Do While~LoopとDo Until~Loopの例を取り上げて見ます。
まず、Do While~Loopの例を下に記述しておきます。

                        
        Sub 計算1()
            Dim a As Long
            Dim b As Long
            
            a = InputBox("初期値を入れてください。")
            b = InputBox("終了値を入れてください。")
            
            If a >= b Or b - a > 10 Then
                MsgBox ("値が不適切です。")
                Exit Sub
            End If
            
            Do While a <> b
                a = a + 1
                MsgBox "aの値は" & a & "になりました。"
            Loop
        End Sub
                        
                    

このVBAを簡潔に紹介すると以下のようになります。
変数aとbを宣言します(データ型は長整数型)。それぞれの変数の中に、ユーザが入力する初期値と終了値を格納します。次にIFステートメントで、aがb以上もしくはbからaを引いた数は10より大きいときは、メッセージボックスとして「値が不適切です。」と表示させます。この処理を行った場合は、ここでプロシージャを終了させます。
Exit  Subは強制的に処理を終了するための記述

Do While ~ Loop構文では、aとbが等しくなければaに1を足したものを再びaに格納し、メッセージとして「aの値は(a)になりました。」と表示させます。これをaとbの値が等しくなるまで繰り返すというプログラムになっています。
つまり、Do  While a<>bが成立している間はLoopまでの処理を実行し、a<>bが成立しなくなったら(aとbが等しくなったら)、繰り返し処理を終えることになります。

では、次に同じような処理をDo Until ~ Loopで記述してみましょう。以下のとおりです。

                        
        Sub 計算1()
            Dim a As Long
            Dim b As Long
            
            a = InputBox("初期値を入れてください。")
            b = InputBox("終了値を入れてください。")
            
            If a >= b Or b - a > 10 Then
                MsgBox ("値が不適切です。")
                Exit Sub
            End If
            
            Do Until a = b
                a = a + 1
                MsgBox "aの値は" & a & "になりました。"
            Loop
        End Sub
                        
                    

内容はほとんど同じです。違うところは、Do Until a = bのところです。動作は、まったく同じですが、条件がまったく反対になっています。一方が「等しくない間」、片方は「等しくなるまで」という条件となっています。違いが分かりましたか?

Do ~ Loop WhileとDo ~ Loop Untilは、条件文が処理の後に来ていますので、必ず条件を指定する前に1回は処理を行い、それから条件文にしたがって繰り返されることになります。上の例では、その前にIFステートメントで処理条件が書いてありますので、Do ~ Loop WhileやDo ~ Loop Untilで記述しても結果は同じになります。