OR
誰でも自由に記事を投稿・編集できるオープンリファレンス
記事ID:701
区分:プログラム  |  分類:VB  |  最終更新日:2016/04/06
クリエイティブ・コモンズ 表示-継承ライセンス 2.1
【VB/VBA】Do~Loopステートメント制御
関連タグ:VB.NET, VB6, VBA, Do Loop, While, Until
このエントリーをはてなブックマークに追加      
本文
履歴
編集
閲覧数: 7,148
Excel VBA ナレッジ > 【VB/VBA】Do~Loopステートメント制御

条件により繰り返し処理を行う場合、VB/VBAではDo~Loopステートメントを使用します。

Do~Loopステートメントは、繰り返し処理を行う条件判定をWhile句またはUntil句で指定します。

While句は条件式が「真」であるあいだ繰り返し処理を行い、Until句は条件式が「偽」であるあいだ(真になるまで)繰り返し処理を行います。

 

語句説明
While 条件式がTrue(真)の間繰り返し処理を行い、条件式がFalse(偽)でループを抜けます。
Until 条件式がFalse(偽)の間繰り返し処理を行い、条件式がTrue(真)でループを抜けます。

 

また、While句/Until句は繰り返し処理の先頭(Doの後)に指定することも、後方(Loopの後)に指定することもできるので、使用方法としては以下の4つのパターンが考えられます。

 

【Do~Loopステートメントによる制御構文】

制御構文説明
Do While 判定条件
    繰り返し処理
Loop

ループの先頭で条件判定を行い、条件式がTrue(真)のあいだ繰り返し処理を行います。
ループの先頭で判定を行っているため、条件によっては繰り返し処理が一度も実行されません。

Do
    繰り返し処理
Loop While 判定条件

ループの最後で条件判定を行い、条件式がTrue(真)のあいだ繰り返し処理を行います。

ループの最後で判定を行っているため、必ず一回は繰り返し処理を実行します。

Do Until 判定条件
    繰り返し処理
Loop

ループの先頭で条件判定を行い、条件式がFalse(偽)のあいだ繰り返し処理を行います。

ループの先頭で判定を行っているため、条件によっては繰り返し処理が一度も実行されません。

Do
    繰り返し処理
Loop Until 判定条件

ループの最後で条件判定を行い、条件式がFalse(偽)のあいだ繰り返し処理を行います。

ループの最後で判定を行っているため、必ず一回は繰り返し処理を実行します。

 

【Do While~Loopの使用例】

Dim sum As Integer
sum = 0
Do While sum < 10
    sum = sum + 1
Loop
Debug.Print sum

 

上記例ではsumの値が10より小さいあいだループ処理が行われ、sumの値が10になった時点で条件がFalseとなるのでループを抜けます。よって結果は「10」と表示されます。

 

【Do Until~Loopの使用例】

Dim sum As Integer
sum = 0
Do Until sum > 10
    sum = sum + 1
Loop
Debug.Print sum

 

上記例ではsumの値が10より大きくなるまでループ処理が行われ、sumの値が11になった時点で条件がTrueとなるのでループを抜けます。よって結果は「11」と表示されます。

 

また、条件により途中でループ処理を強制終了したい(ループを抜けたい)場合は、Exitステートメントを使用します。

 

【Exitステートメントによるループ処理の中断】

Do
    If sum > 10 Then
        Exit Do
    End If
    sum = sum + 1
Loop

 

上記例では判定をループの中で行い、条件を満たした場合にExitステートメントによりループを抜けます。

サンプルプログラム

以下サンプルは数当てゲームになります。

0~9の範囲で発生させた乱数をユーザに当てさせ、何度もゲームを繰り返します。正解するかゲームごとに続行確認のメッセージが表示されるのでそれをキャンセルすることでループ処理を抜け、ゲーム終了となります。

Public Sub sample()
    Dim inputData As String
    Dim intData As Integer
    Dim ran As Integer

    Do
        ' 0~9の乱数を取得します
        ran = Int(Rnd * 10)

        ' ユーザに数値を入力させます
        inputData = InputBox("0~9の整数を入力してください")

        ' 入力値のチェック
        If IsNumeric(inputData) Then

            ' 入力値を数値に変換します
            intData = CInt(inputData)
            
            ' 乱数と入力値を照合して判定します
            If intData = ran Then
                MsgBox "正解です!"
                Exit Do
            Else
                MsgBox "不正解です!答えは「" & ran & "」です。"
            End If
            
            ' 続行の確認をし、キャンセルでループを抜けます
            If MsgBox("続けますか?", vbInformation + vbOKCancel, "確認") = vbCancel Then
                Exit Do
            End If
        Else
            MsgBox "0~9の整数を入力してください", vbCritical
        End If

    Loop

End Sub

※上記サンプルでは入力値のチェックを数値かどうかしか見ていませんが、厳密には0~9の整数かどうかのチェックも必要かもしれません。

関連記事
関連記事はありません。
外部リンク
外部リンクはありません。
- 記事検索 -