アクセス上位ページ
 
最近の更新内容
[NEXT] ⇒ (5)-f.With ステートメント

Excel VBA ≫ 1.基礎編 - 制御構文(5)-e.繰り返し処理 Do … Loop

【ページ内リンク】

Do … Loop

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



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

条件を処理を繰り返す前に判定するには"Do"に続けて条件文を記述します。 処理を行う前に条件を判定するため、条件の判定結果によっては1度も処理されないことがあります。
  • 繰り返しを続ける条件を記述 ・・・ While
  • "While"につづけて条件を記述すると、この条件がTrueの間処理が繰り返されます。 そして、条件がFalseになると繰り返しが終了します。

    【構文(その1)】
    Do While [繰り返しを続ける条件]
        処理
    Loop
    
  • 繰り返しを終了する条件を記述 ・・・ Until
  • "Until"につづけて条件を記述すると、条件がTrueになると処理が終了します。 したがって、条件がFalseの間処理が繰り返されることになります。

    【構文(その2)】
    Do Until [繰り返しを終了する条件]
        処理
    Loop
    


    次のマクロはテキストファイルを読み込み、その内容をイミディエイトウィンドウへ表示します。
    ※サンプルマクロが組み込まれたエクセルファイルと同一フォルダ内に"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
    
    ⇒ サンプルマクロ集 へ


    <入力ファイルの内容>
    入力ファイルの内容 <sample5_9の実行結果>
    sample5_9の実行結果 <sample5_9の実行結果(イミディエイトウィンドウ)>
    aaa
    bbb
    ccc
    1234
    

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

<サイト内関連リンク> 関連リンクもチェック!!
- Do Until…Loopの使用例(sample6_18_2)

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

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

  • 【構文(その3)】
    Do
        処理
    Loop While [繰り返しを続ける条件]
    
  • 繰り返しを終了する条件を記述 ・・・ Until

  • 【構文(その4)】
    Do
        処理
    Loop Until [繰り返しを終了する条件]
    
    次のマクロは数値が入力されるまで何回でもインプットボックスを再表示するものです。
    Sub sample5_10()
        Dim val     As Variant
    
        Do
            val = InputBox("数値を入力してください。")
        Loop Until IsNumeric(val)
    
        MsgBox "入力された数値は『" & val & "』です。"
    End Sub
    


    <sample5_10実行直後の入力ダイアログ> sample5_10の実行直後の入力ダイアログ 入力ダイアログに文字列を入力して [ OK ] ボタンを押下します。 入力ダイアログに文字列を入力 すると再度入力ダイアログが表示されます。 再度入力ダイアログが表示される 今度は数値を入力します。 入力ダイアログに数値を入力 すると入力した数値がメッセージボックスで表示されます。 入力した数値が表示される

ループを途中で終了する

Do…Loopステートメントを途中で終了したい場合はExit Doステートメントを使用します。 Exit Doステートメントが呼ばれると、それを囲っている一番内側のDo…Loopの繰り返しを直ちに抜け出し、次の処理へ移ります。

管理人から一言・・・ 実行したマクロが終了しない・・・
繰り返し処理は終了条件の記述ミスなどにより無限ループに陥ってしまうことがあります。こんなときは[Esc]キーを押下し続けることで実行中のマクロを強制的に中断することができます。いざというときのために覚えておきましょう。
カテゴリ内ページ



Page
Top