条件式がFalseの間繰り返す

広告

前のページでは条件を満たす間繰り返しを行う方法について見ましたが、同じような構文で条件を満たさない間繰り返しを行う構文も用意されています。

構文は下記のようになります。

Do Until 条件式
    (条件式がFalseの時に行う処理1)
    (条件式がFalseの時に行う処理2)
Loop

この構文の場合、条件式が「False」の間は「Do」と「Loop」の間に書かれた処理を繰り返し行います。

例えば前のページのサンプルは次のように記述することが出来ます。

Dim sum As Integer
Dim x As Integer

sum = 0
x = 1

Do Until x > 10
    sum = sum + x

    x = x + 1
Loop

Range("A1").Value = sum

動作などは「Do While ... Loop」の場合と同様です。異なるのは条件式が「False」の間だけ繰り返しが実行されるということです。

ただ、条件式が「False」の間だけ実行したい場合には論理演算子を使って次のように記述する事もできます。

Dim sum As Integer
Dim x As Integer

sum = 0
x = 1

Do While Not x > 10
    sum = sum + x

    x = x + 1
Loop

Range("A1").Value = sum

論理演算子の「Not」はその後に書かれた条件式の結果を反転させます。その為、「Do Until ... Loop」構文で記述できる内容は「Do While ... Loop」構文でも記述することが出来ます。

「Do While」と「Do Until」の両方を使うとケアレスミスの原因となりますので、条件式の記述で「False」の場合だけ実行するというような記述の方が望ましい場合には論理演算子の「Not」を使って記述したほうがいいのではと思います。(論理演算子については『演算子』を参照して下さい)。

サンプルプログラム

では簡単なサンプルで試してみましょう。

testloop2.bas

Sub テスト()
    Dim sum As Integer
    Dim x As Integer

    sum = 0
    x = 1

    Do Until x > 10
        sum = sum + x

        x = x + 1
    Loop

    Range("A1").Value = sum

End Sub

上記のマクロを実行すると次のようになります。

繰り返し処理

今回のサンプルでは1から順に10まで加算した値をセルに表示しています。

( Written by Tatsuo Ikura )