処理を繰り返す回数はわからないが、繰り返しを続ける(または終了する)条件がわかっている場合は Do…Loop ステートメントを使用します。Do…Loop ステートメントには条件処理を繰り返す前に判定する方法と処理を繰り返した後に判定する方法があります。さらに、条件の記述方法にも”While”と”Until”の2つがあります。
繰り返し処理の前で判定する
条件を処理を繰り返す前に判定するには”Do”に続けて条件文を記述します。処理を行う前に条件を判定するため、条件の判定結果によっては1度も処理されないことがあります。
前判定Whileループ
“While”につづけて条件を記述すると、この条件がTrueの間処理が繰り返されます。そして、条件がFalseになると繰り返しが終了します。
前判定Untilループ
“Until”につづけて条件を記述すると、条件がTrueにまで処理が繰り返されます。
前判定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
テキストファイル読込
【事前準備】入力用テキストファイル
上記サンプルマクロが正常に終了すると、テキストファイルのデータをイミディエイトウィンドウに出力して、終了メッセージを表示します。
【参考】入力ファイルがない場合はエラーメッセージを表示して、処理を終了します。
Do Until…Loopの使用例(sample6_18_2)
繰り返し処理の後で判定する
条件を処理を繰り返した後に判定するには”Loop”に続けて条件文を記述します。処理を行った後に条件を判定するため、最低1度は処理が実行されます。
後判定Whileループ
繰り返しを続ける条件を記述
後判定Untilループ
繰り返しを終了する条件を記述
後判定Untilを使用したサンプル
次のサンプルマクロは数値が入力されるまで何回でもインプットボックスを再表示するものです。
Sub sample5_10()
Dim val As Variant
Do
val = InputBox("数値を入力してください。")
Loop Until IsNumeric(val)
MsgBox "入力された数値は『" & val & "』です。"
End Sub
上記サンプルマクロを実行すると、入力ダイアログが表示されます。
入力ダイアログにあえて文字列を入力して、OK ボタンを押下します。
すると、再度入力ダイアログが表示されます。ループ処理が繰り返されたことになります。
今度は数値を入力します。
すると、ループ処理が終了して入力した数値がメッセージボックスで表示されました。