Worksheet_Changeの中でセルを書き換えると、またイベントが起きて無限ループ…焦りますよね。
検索で来られた方のために、まずは最も確実な解決コード(王道)を置いておきます。
▼ コピペで解決!王道の修正コード
最も確実なのは『Application.EnableEvents = False』を使って、一時的にイベントの発生を止める方法です。
Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ErrorHandler ' 1. イベントの発生を一時停止(ここが重要!) Application.EnableEvents = False ' 2. 本来やりたい処理(例:E列に更新日時を入れる) If Target.Column <> 5 Then Cells(Target.Row, 5).Value = Now End If CleanUp: ' 3. 最後に必ずイベントを再開させる Application.EnableEvents = True Exit Sub ErrorHandler: ' エラー時もイベント再開を忘れないようにする Resume CleanUp End Sub

動画本編では、こうしたトラブルが起きる「仕組み」や、別の回避アプローチ(列判定)について、ライブ配信の記録として解説しています。
1. 【一番のポイント】なぜ無限ループが起きるのか?
タイムライン: 01:28 https://youtube.com/live/s2ptuKdbQPo?t=88
内容: 「自分が書き換えたセルに反応して、また自分が呼ばれる」という恐怖のメカニズムを図解(?)しています。
ポイント: この仕組みを理解しておくと、他のイベント処理でもハマらなくなります。
2. 【見どころ】実際にループしている様子(デバッグ)
タイムライン: 05:07 https://youtube.com/live/s2ptuKdbQPo?t=307
内容: イミディエイトウィンドウを使って、バックグラウンドで処理が走り続けている様子を確認します。
ポイント: 「Excelが点滅して重い…」という時の原因特定に役立つデバッグ手法です。
3. 【動画内の解決策】列番号で判定して回避する方法
タイムライン: 07:11 https://youtube.com/live/s2ptuKdbQPo?t=431
内容: 動画内ではEnableEventsを使わず、「書き換える列(E列)以外なら処理する」というロジックで回避しています。
ポイント: シンプルな条件分岐で逃げる、もう一つの考え方として参考になります。
4. 【正直にお伝えします:注意点】
・この動画は2018年のライブ配信アーカイブです。
・現代のベストプラクティスは冒頭に記載した `EnableEvents` を使う方法です。
・動画内の方法は「ロジックでの回避」ですが、複雑な処理になると管理が難しくなる場合があります。
▼
皆さんも「VBAでExcelが固まった!」という経験はありますか?
「このコードで直った!」「ここが分からなかった」など、コメントいただけると嬉しいです。
質問も大歓迎です!
#ExcelVBA #Worksheet_Change #無限ループ #デバッグ