制御 実行を繰り返すフロー制御ステートメントDo~Until~Loop

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

Do Until...Loop ステートメント

While 指定した条件が真 (True) である間

Until 指定した条件が真 (True) になるまで

  • 構文

  • 次の構文を使用できます。
    • Do [{While | Until} condition]
    • [statements]
    • [Exit Do]
    • [statements]
    • Loop
  • または、
    • Do
    • [statements]
    • [Exit Do]
    • [statements]
    • Loop [{While | Until} condition]
  • Do...Loop ステートメントの構文は、次の指定項目から構成されます。
  • 指定項目 内容

  • condition
  • 省略可能です。
  • 真 (True) または偽 (False) を評価する数式、あるいは文字列式を指定します。
  • 引数 condition の値が Null 値の場合、引数 condition は偽 (False) であるとみなされます。
  • statements
  • 引数 condition が真 (True) である間、または引数 condition が真 (True) になるまで繰り返し実行される、任意の行数のステートメントを記述します。
  • 解説

  • Do...Loop ステートメントから抜け出す別の方法として、Do...Loop ステートメント内に任意の数の Exit Do ステートメントを指定することができます。
  • 通常、Exit Do ステートメントはいくつかの条件を評価した後で使用します。
  • たとえば、If...Then ステートメントを評価した後で Exit Do ステートメントを実行して、制御をキーワード Loop の次のステートメントに直ちに移します。
  • Do...Loop ステートメントはネスト (入れ子) 構造にすることができます。
  • つまり、Do...Loop ステートメントの内部に別の Do...Loop ステートメントを入れることができます。
  • ネスト (入れ子) 構造にしたときに Exit Do が実行されると、その Exit Do を囲んでいる 1 番内側のループから抜け出します。

Do Until...Loop ステートメントの使用例

Option Explicit


Private Sub Test1()
'*****************************************************
'指定されたディレクトリをループして内容を返す
'*****************************************************
'条件式を満たすまで繰り返す
'Do Until...Loop

Dim pth As String
Dim buf As String
Dim x As Long

pth = ThisWorkbook.Path & "\"
x = 0

buf = Dir(pth, vbDirectory)

    Do Until Len(buf) = 0
        Debug.Print "x" & x & ":" & buf
        x = x + 1
        ' Dir関数を使用して、次の検索をします。
        buf = Dir()
    Loop

'x0:.
'x1:..
'x2: test1.jpg
'x3: test1.txt
'x4: test1.xls
'x5: test2.txt
'x6: testDirectory

End Sub


Private Sub Test2()
'*****************************************************
'指定されたディレクトリをループして内容を返す
'*****************************************************
'条件式を満たすまで繰り返す
'Do ...Loop Until

Dim pth As String
Dim buf As String
Dim x As Long

pth = ThisWorkbook.Path & "\"
x = 0

buf = Dir(pth, vbDirectory)

    Do
        Debug.Print "x" & x & ":" & buf
        x = x + 1
        ' Dir関数を使用して、次の検索をします。
        buf = Dir()
    Loop Until Len(buf) = 0

'x0:.
'x1:..
'x2: test1.jpg
'x3: test1.txt
'x4: test1.xls
'x5: test2.txt
'x6: testDirectory

End Sub


Private Sub Test3()
'*****************************************************
'指定されたディレクトリをループして各ファイル名を返す
'*****************************************************

Dim pth As String
Dim buf As String
Dim i As Long, x As Long, y As Long
Dim myDir As String 'カレントフォルダ(自分)
Dim upDir As String 'ルートフォルダ(親フォルダ)
myDir = "."
upDir = ".."

pth = ThisWorkbook.Path & "\"
i = 0: x = 0: y = 0
buf = Dir(pth, vbDirectory)
Do Until Len(buf) = 0
    Debug.Print "x" & x & ":" & buf
x = x + 1
If (buf <> myDir) And (buf <> upDir) Then
    Debug.Print "y" & y & ":" & buf
    y = y + 1
If (GetAttr(pth & buf) And 16) <> 16 Then
    Debug.Print "i" & i & ":" & buf
    i = i + 1
End If
End If
' Dir関数を使用して、次の検索をします。
buf = Dir()
Loop

'┌──────┬─┬──────────────┐
'│定数        │値│内容                        │
'├──────┼─┼──────────────┤
'│vbNormal    │0 │標準ファイル                │
'│vbReadOnly  │1 │読み取り専用ファイル        │
'│vbHidden    │2 │隠しファイル                │
'│vbSystem    │4 │システムファイル            │
'│vbVolume    │8 │ボリュームラベル            │
'│vbDirectory │16│フォルダ                    │
'│vbAlias     │64│エイリアスファイル(Macのみ) │
'└──────┴─┴──────────────┘
End Sub

 

2000年01月01日|[VBサンプルコード]:[制御]