「While…Wend」で書いた処理は、Do…Loopでも同じように書けます。しかもDo…Loopは「先判定」「後判定」の両方が選べるので柔軟です。
ここでは、先ほどの練習問題を例にして Do…Loop版(先判定/後判定) を示します。
例題1: 1から100までで3の倍数だけ表示
先判定(Do While)
Sub 三の倍数_DoWhile()
Dim i As Integer
i = 1
Do While i <= 100
If i Mod 3 = 0 Then
Debug.Print i
End If
i = i + 1
Loop
End Sub
VB- 特徴: ループに入る前に条件をチェック。最初から条件がFalseなら1回も実行されない。
後判定(Do…Loop While)
Sub 三の倍数_DoLoopWhile()
Dim i As Integer
i = 1
Do
If i Mod 3 = 0 Then
Debug.Print i
End If
i = i + 1
Loop While i <= 100
End Sub
VB- 特徴: まず1回処理を実行してから条件をチェック。最低1回は必ず実行される。
例題2: A列の最初の10行をチェックして文字数が5文字以上なら「長い」と表示
先判定
Sub 長い文字列_DoWhile()
Dim row As Integer
row = 1
Do While row <= 10
If Len(Cells(row, 1).Value) >= 5 Then
Debug.Print "A" & row & " は長い: " & Cells(row, 1).Value
End If
row = row + 1
Loop
End Sub
VB後判定
Sub 長い文字列_DoLoopWhile()
Dim row As Integer
row = 1
Do
If Len(Cells(row, 1).Value) >= 5 Then
Debug.Print "A" & row & " は長い: " & Cells(row, 1).Value
End If
row = row + 1
Loop While row <= 10
End Sub
VB例題3: 入力値を2倍し続け、1000を超えたら止める
先判定
Sub 倍々計算_DoWhile()
Dim num As Long
num = 2
Do While num <= 1000
Debug.Print num
num = num * 2
Loop
Debug.Print "終了: " & num & " は1000を超えました"
End Sub
VB後判定
Sub 倍々計算_DoLoopWhile()
Dim num As Long
num = 2
Do
Debug.Print num
num = num * 2
Loop While num <= 1000
Debug.Print "終了: " & num & " は1000を超えました"
End Sub
VB✅ まとめ
- Do While … Loop → 先判定。条件がFalseなら1回も実行されない。
- Do … Loop While → 後判定。最低1回は必ず実行される。
- 利点: Do…Loopなら「Exit Do」で途中終了も可能。柔軟性が高いので実務ではこちらが推奨。
