無限ループ

無限ループとは、「終了条件がない、または常に真(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のフリーズ、データ損失
安全対策DoEventsExit DoCtrl + Break
実務での使用例状態監視、待機処理、インタラクション待ちなど
タイトルとURLをコピーしました