VBAのDoループで繰り返し処理を行う方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Doの概要

条件を満たす間、繰り返し処理を行う VBAの予約語

Do

概要 Do ステートメントは、VBAで繰り返し処理(ループ)を行うために使用されます。条件を満たしている間、または満たすまでループを続けることができます。

わかりやすく説明 条件を満たす間、または満たすまで繰り返し処理を実行する命令。

  • 条件付きで繰り返し処理を実行できる。
  • Do While や Do Until を使い、ループの実行条件を細かく制御できる。
  • Excel VBAのデータ処理や自動化に役立つ。

Do Whileの基本的な使い方

以下の例では、Do While を使って、条件が満たされる間ループを実行します。

Sub TestDoWhile()
    Dim i As Integer
    i = 1
    
    Do While i <= 5
        MsgBox "カウント: " & i
        i = i + 1
    Loop
End Sub

解説:

  • Do While i <= 5: i が 5 以下の間、ループを実行。
  • i = i + 1: ループごとに i を 1 増加。
  • カウントが 6 になると条件が満たされなくなり、ループが終了。

Do Untilの基本的な使い方

以下の例では、Do Until を使って、条件が満たされるまでループを実行します。

Sub TestDoUntil()
    Dim i As Integer
    i = 1
    
    Do Until i > 5
        MsgBox "カウント: " & i
        i = i + 1
    Loop
End Sub

解説:

  • Do Until i > 5: i が 5 を超えるまでループを実行。
  • i = i + 1: ループごとに i を 1 増加。
  • カウントが 6 になると条件が満たされ、ループが終了。

条件を後置するDoループ

Doループは、条件を前置する(Do WhileDo Until)だけでなく、後置することも可能です。

Sub TestPostCondition()
    Dim i As Integer
    i = 1
    
    Do
        MsgBox "カウント: " & i
        i = i + 1
    Loop While i <= 5
End Sub

解説:

  • 最初に必ず1回処理を実行する。
  • Loop While i <= 5 で条件をチェックし、満たす間はループを続ける。

Excel VBAでのDoループの活用

Excelシートのデータを順番に処理する例です。

Sub ReadCells()
    Dim rowNum As Integer
    rowNum = 1
    
    Do While Cells(rowNum, 1).Value <> ""
        MsgBox "A" & rowNum & " の値: " & Cells(rowNum, 1).Value
        rowNum = rowNum + 1
    Loop
End Sub

解説:

  • セルA列の値を1行ずつ読み取る。
  • 空白セルが出るまでループを続ける。

Doの注意事項

  • 無限ループに注意: 条件を適切に設定し、必ずループが終了するようにする。
  • 後置条件付きループは必ず1回実行される: 条件を後置すると、最低1回はループが実行される。
  • Exit Do を活用する: ループを途中で抜ける場合は Exit Do を使う。

よくある質問

Q: Do While と Do Until の違いは?
A: Do While は条件が満たされる間ループを続け、Do Until は条件が満たされるまでループを続けます。
Q: ループを途中で終了するには?
A: Exit Do を使用すると、任意のタイミングでループを抜けられます。
Q: 無限ループになったときの対処法は?
A: Ctrl + Break キーで処理を強制終了できます。

まとめ

  • Doループは、条件を満たす間または満たすまで繰り返し処理を実行する。
  • 条件を前置(Do While / Do Until)または後置(Loop While / Loop Until)できる。
  • Excel VBAのデータ処理や自動化に活用できる。
  • 無限ループを防ぐため、適切な条件を設定する。
  • ループを途中で終了する場合は Exit Do を使用する。