無限ループとは、「終了条件がない、または常に真(True)となるため、永遠に繰り返される処理」のことを指します。適切に使えば繰り返し処理に役立ちますが、誤用するとアプリケーションがフリーズする原因になります。
✅ 無限ループの基本形
VBAで無限ループを作る代表的な構文は次の3種類です。
① Do While True(もっとも一般的)
Do While True
' 無限に繰り返す処理
Loop
② Do Until False
Do Until False
' 無限に繰り返す処理
Loop
③ Do...Loop(条件なし)
Do
' 無限に繰り返す処理
Loop
このように、終了条件が「常に満たされる」「指定されていない」ため、どれも永遠に繰り返し続ける構文です。
🛑 無限ループの危険性
- Excelが応答しなくなる(フリーズ)
- 強制終了しないと止まらない
- 保存されていないデータが失われる可能性がある
➤ 強制停止するには?
Ctrl + Break
(WindowsでExcel/VBAを強制停止するショートカット)- 反応がない場合は「タスクマネージャー」からExcelを終了するしかない
🧯 無限ループを安全に使うテクニック
1. DoEvents の活用
Do While True
DoEvents ' 他の操作を受け付けるようにする
Debug.Print Now
Loop
DoEvents
を入れることで、VBAが他の処理(マウスクリックやEscキーなど)を受け付けられるようになる- Excelが完全にフリーズしにくくなる
2. 条件付きで抜ける:Exit Do
Do While True
Dim key As String
key = InputBox("終了するには「exit」と入力")
If LCase(key) = "exit" Then
Exit Do
End If
MsgBox "入力:" & key
Loop
このようにすれば、ある条件でループを抜けられるので実用性が高まります。
🔁 他のループとの違い
ループ構文 | 無限ループが可能? | 説明 |
---|---|---|
Do While | 〇 | 条件により無限ループ可能 |
Do Until | 〇 | 条件により無限ループ可能 |
Do...Loop | 〇 | 条件なしで常にループ |
For...Next | △(通常は不適) | 上限を極端に大きく設定すれば疑似無限可能 |
❌ 推奨されない書き方:For に大きな値を入れる
Dim i As Long
For i = 1 To 999999999
' 実質的な無限に近いループ
Next
これは無限ではありませんが、処理時間が非常に長くなるため、避けた方が無難です。
📌 無限ループの活用例 ※慎重に使う必要あり
① 特定の状態を監視する(例:セルの変化を監視)
Do
If Range("A1").Value = "STOP" Then
Exit Do
End If
DoEvents
Loop
② 外部プロセスの終了待ち(タイマー付き無限ループ)
Dim startTime As Double
startTime = Timer
Do
If Timer - startTime > 10 Then Exit Do '10秒で抜ける
DoEvents
Loop
☑ まとめ
項目 | 内容 |
---|---|
定義 | 終了条件が常に満たされてループが止まらない構文 |
主な構文 | Do While True , Do Until False , Do...Loop |
危険性 | Excelのフリーズ、データ損失 |
安全対策 | DoEvents 、Exit Do 、Ctrl + Break |
実務での使用例 | 状態監視、待機処理、インタラクション待ちなど |