MENU

【初心者向け】VBAで無限ループになったときの原因と対処法

この記事で解決できる3つの疑問

A子さん

ループが止まらなくなって焦ったけど、どうすれば止められるの?
無限ループになるのはなぜ?
次から無限ループを防ぐにはどうすればいいの?

結論:原因のほとんどは「条件が変化しない」ことです

VBAの ForDo While などの繰り返し処理で、ループが終わらない=無限ループになってしまうことは初心者にありがちなトラブルです。
多くの場合、「ループが終了する条件がずっと満たされない」または「カウンタが変化していない」ことが原因です。

目次

無限ループになったときの緊急停止方法

まず知っておきたいのは、「Escキー」で止められるということです。

✅ VBAの無限ループを止める方法

  1. キーボードの [Esc] キーを押す
    → 処理中のマクロが中断されます。
  2. [Ctrl] + [Pause/Break] でも中断可能(ノートPCでは Fnキーとの組み合わせ)
  3. それでも止まらない場合は、タスクマネージャーでExcelを強制終了

なぜ無限ループになるのか?よくある原因

❌カウンターが変化していない

Dim i As Integer
i = 1
Do While i <= 5
    MsgBox i
    ' i = i + 1 がないため、iはずっと1のまま
Loop

❌ 条件がいつまでも真(True)のまま

Dim flg As Boolean
flg = True
Do While flg
    MsgBox "止まらない…"
Loop

flg が途中で False に変わらなければ、ループは永遠に続きます。

無限ループを防ぐための書き方の工夫

✅ 変化を明示する

ループの中でループ条件に関わる変数を必ず更新しましょう。

Dim i As Integer
i = 1
Do While i <= 5
    MsgBox i
    i = i + 1 ' ← ここが重要
Loop

✅ 条件を慎重に書く

「<=」「<」「<>」などの条件式をよく見直すクセをつけましょう。

それでも不安なら「フェイルセーフ」を仕込もう

無限ループを完全に防ぐのは難しいときもあります。
そんな時は回数制限を設けておくのが効果的です。

Dim i As Integer
i = 1
Dim count As Integer
count = 0

Do While i <= 5
    MsgBox i
    i = i + 1
    count = count + 1

    If count > 1000 Then ' 1000回以上回ったら強制停止
        MsgBox "安全のため処理を中断しました"
        Exit Do
    End If
Loop

まとめ:ループには「変化」と「出口」が必要!

無限ループは変数の更新忘れや条件ミスで起こる

[Esc]キーで中断できることを覚えておく

どうしても不安なら「フェイルセーフ」の仕組みを

関連記事リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次