繰り返し処理 Do … Loop の使用方法

処理を繰り返す回数はわからないが、繰り返しを続ける(または終了する)条件がわかっている場合は Do…Loop ステートメントを使用します。Do…Loop ステートメントには条件処理を繰り返す前に判定する方法と処理を繰り返した後に判定する方法があります。さらに、条件の記述方法にも”While”と”Until”の2つがあります。

スポンサーリンク

繰り返し処理の前で判定する

条件を処理を繰り返す前に判定するには”Do”に続けて条件文を記述します。処理を行う前に条件を判定するため、条件の判定結果によっては1度も処理されないことがあります。

前判定Whileループ

“While”につづけて条件を記述すると、この条件がTrueの間処理が繰り返されます。そして、条件がFalseになると繰り返しが終了します。

構文
Do While [繰り返しを続ける条件]
    処理
Loop

前判定Untilループ

“Until”につづけて条件を記述すると、条件がTrueにまで処理が繰り返されます。

構文
Do Until [繰り返しを終了する条件]
    処理
Loop

前判定Whileを使用したサンプル

次のマクロはテキストファイルを読み込み、その内容をイミディエイトウィンドウへ表示します。
※サンプルマクロが組み込まれたエクセルファイルと同一フォルダ内に”test.txt”というファイルがあることが前提となっています。

Sub sample5_9()
    Dim FileNumber      As Integer
    Dim FilePath        As String
    Dim InputData       As String

    '使用可能なファイル番号を取得します。
    FileNumber = FreeFile

    'このマクロが組み込まれているエクセルファイルと
    '同一フォルダ内の"test.txt"を入力とします。
    FilePath = ThisWorkbook.Path & "¥test.txt"

    '入力ファイルの存在チェック
    If Dir(FilePath) = "" Then
        MsgBox "入力ファイルが存在しません。", vbCritical
        '入力ファイルがない場合はここで処理を終了させます。
        End
    End If

    'テキストファイルを入力モードで開きます。
    Open FilePath For Input As #FileNumber

    'ファイルの終わりになるまで
    'ファイル内のデータを1行ずつ読み込みます。
    Do While Not EOF(FileNumber)
        Line Input #FileNumber, InputData
        'イミディエイトウィンドウへ表示
        Debug.Print InputData
    Loop

    Close #FileNumber

    MsgBox "処理が終了しました。", vbInformation
End Sub

 Dir関数 MsgBox関数 ThisWorkbook 
テキストファイル読込

【事前準備】入力用テキストファイル

入力ファイルの内容
入力ファイルの内容

上記サンプルマクロが正常に終了すると、テキストファイルのデータをイミディエイトウィンドウに出力して、終了メッセージを表示します。

sample5_9の実行結果
sample5_9の実行結果

【参考】入力ファイルがない場合はエラーメッセージを表示して、処理を終了します。

入力ファイルがない場合のメッセージ
入力ファイルがない場合のメッセージ

 Do Until…Loopの使用例(sample6_18_2)

繰り返し処理の後で判定する

条件を処理を繰り返した後に判定するには”Loop”に続けて条件文を記述します。処理を行った後に条件を判定するため、最低1度は処理が実行されます。

後判定Whileループ

繰り返しを続ける条件を記述

構文
Do
    処理
Loop While [繰り返しを続ける条件]

後判定Untilループ

繰り返しを終了する条件を記述

構文
Do
    処理
Loop Until [繰り返しを終了する条件]

後判定Untilを使用したサンプル

次のサンプルマクロは数値が入力されるまで何回でもインプットボックスを再表示するものです。

Sub sample5_10()
    Dim val     As Variant

    Do
        val = InputBox("数値を入力してください。")
    Loop Until IsNumeric(val)

    MsgBox "入力された数値は『" & val & "』です。"
End Sub

 InputBox MsgBox

上記サンプルマクロを実行すると、入力ダイアログが表示されます。

sample5_10の実行直後の入力ダイアログ
sample5_10の実行直後の入力ダイアログ

入力ダイアログにあえて文字列を入力して、OK ボタンを押下します。

入力ダイアログに文字列を入力
入力ダイアログに文字列を入力

すると、再度入力ダイアログが表示されます。ループ処理が繰り返されたことになります。

再度入力ダイアログが表示される
再度入力ダイアログが表示される

今度は数値を入力します。

入力ダイアログに数値を入力
入力ダイアログに数値を入力

すると、ループ処理が終了して入力した数値がメッセージボックスで表示されました。

入力した数値が表示される
入力した数値が表示される
タイトルとURLをコピーしました