三流君のソースコード置き場

ブログにソースコードをアップして、ブログの検索機能で利用してます(利用予定です)

挨拶・自己紹介:「こんな感じ」や「あの、あの」と活舌の悪い、
三流プログラマーのオッサンです
Ken3三流君へ問い合わせ・連絡先:
[Ken3(管理者)へメッセージを送る], [YouTube動画にコメントを書く]
※↑質問・感想,コード修正・作成依頼など気軽に送ってください。

【結論:無限ループは「イベントの一時停止」で解決します!】Worksheet_Changeの中で無限ループするコードについて

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
処理イメージをAIが図解

動画本編では、こうしたトラブルが起きる「仕組み」や、別の回避アプローチ(列判定)について、ライブ配信の記録として解説しています。

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` を使う方法です。
・動画内の方法は「ロジックでの回避」ですが、複雑な処理になると管理が難しくなる場合があります。


皆さんも「VBAExcelが固まった!」という経験はありますか?
「このコードで直った!」「ここが分からなかった」など、コメントいただけると嬉しいです。
質問も大歓迎です!

#ExcelVBA #Worksheet_Change #無限ループ #デバッグ


質問・感想・クレームなど、
気軽にコメント欄に書いてもらえるとうれしいです。

[Googleフォームにコメントを残す]
↑質問・コメントの入力フォームです、気軽に書いてください


フッター:最後にKen3Videoの動画一覧を紹介します

YouTubeにアップした動画です。他の動画を一瞬でも見てもらえるとさらに嬉しいです。
再生リスト:[三流君Ken3の最新動画]←リストの一覧形式で表示する


また、ブログを見に来てくださいね。ではまたぁ~