こんにちは。
ごんた@VBAレッスン です。
今日は、VBAで誰もが一度は経験する
「止まらないループ」=無限ループ
についてお話しします。
For / For Each / Do While はとても便利ですが、
条件や書き方を少し間違えるだけで、
Excel が固まって再起動が必要になる“無限ループ”
が起きることがあります。
でも安心してください。
ループの仕組みと安全な使い方を知っておけば、怖がる必要はありません。
■ 1. ループが便利な理由
ループは、Excel の繰り返し作業を一瞬で自動化できる強力な仕組みです。
- 同じ作業を何十回・何百回でも正確に繰り返せる
- 条件に応じて必要な処理だけ実行できる
- データ量が増えてもコードはそのままでOK
- 行・セル・シート・ファイルなど、あらゆる対象に使える
「繰り返し作業=ループで自動化」が基本です。
■ 2. でも、書き方を間違えると無限ループに…
● For の落とし穴:カウンタをいじると止まらない
```vb
For i = 1 To 10
i = i - 1 ' ← 永遠に終わらない
Next i
```
ループ変数を自分で書き換えると、終わらなくなることがあります。
安全策:ループ変数は触らない。必要なら別の変数を使う。
---
● For Each の落とし穴:対象を削除すると壊れる
```vb
For Each c In Range("A1:A10")
If c.Value = "" Then
c.Delete ' ← コレクションが変わって無限ループ化
End If
Next
```
ループ中に削除・追加すると、対象が変わってループが壊れます。
安全策:削除したいときは後ろから For で回す。
---
● Do While の落とし穴:条件が変わらないと永遠に続く
```vb
Do While Cells(i, 1).Value <> ""
' i を増やし忘れると永遠に続く
Loop
```
安全策:ループ内で必ず条件が変わるようにする。
---
■ 3. 無限ループを防ぐ最強の方法
● ブロックポイント(ブレークポイント)を置く
ループの中に赤い丸(ブレークポイント)を置いておくと、
”必ずそこで止まる“安全装置”になります。
● ステップ実行で「1回だけ回す」
いきなり全部回さず、
1回だけ回して変数や条件が正しく変化しているか確認する。
これが“最小単位デバッグ”です。
確認ポイントはこの3つ:
- カウンタが増えているか
- 条件が変わっているか
- 想定外のセルを参照していないか
1回だけ回すだけで、無限ループの9割は防げます。
🌱 まとめ(ごんた式)
- ループは繰り返し作業を一瞬で自動化できる便利な仕組み
- でも書き方を間違えると無限ループで Excel が固まることがある
- ブロックポイント+ステップ実行で「1回だけ回す」
→ これだけで安全に使えるようになる
ループは怖くありません。
正しい使い方と“止める仕組み”を知っていれば、強力な味方になります。
🌱 VBAを学び始めた方へ。
あなたの“困った”に合わせて、複数のアプローチを丁寧にお伝えするレッスンはこちら!