Excel VBA | While…Wend

VBA
スポンサーリンク

「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」で途中終了も可能。柔軟性が高いので実務ではこちらが推奨。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました