Applicationオブジェクト Application.EnableEvents

Application

Application.EnableEvents は、Excel VBA における Application オブジェクトの イベント(Workbook_Open、Worksheet_Change など)を有効または無効にするプロパティです。マクロ実行中にイベントがトリガーされるのを防ぎたいときに非常に有用です。


🔷 基本構文

Application.EnableEvents = False  ' イベントを無効化
Application.EnableEvents = True ' イベントを再度有効化

🔷 何のために使うのか?

✅ 主な目的は「マクロ中のイベント暴走の防止」

  • Worksheet_Change などのイベントプロシージャが、マクロの変更によって 意図せず再び発火することを防ぐ
  • 再帰的にイベントが繰り返される事態(無限ループ)を回避
  • 処理速度の最適化:イベントのトリガーを止めることで、余計なイベント処理を減らす

🔷 使用例①:セル変更イベントの再帰防止

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo 終了処理
Application.EnableEvents = False ' ここでイベント停止

' イベント中にセルを変更
If Not Intersect(Target, Range("A1")) Is Nothing Then
Range("B1").Value = "変更されました"
End If

終了処理:
Application.EnableEvents = True ' 忘れずに再有効化
End Sub

🔷 使用例②:マクロ全体で一時的にイベント無効化

Sub 大量変更処理()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With

' イベント発火を気にせずセル変更
Range("A1:A1000").Value = "処理中"

' 各種設定を戻す
With Application
.EnableEvents = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub

🔷 よく使われるイベント例(止める対象)

イベントプロシージャ説明
Workbook_Openブックを開いた時
Workbook_SheetChangeシートが変更されたとき
Worksheet_Changeセルの値が変更されたとき
Workbook_BeforeCloseブックを閉じる前

🔷 注意点・落とし穴

項目内容
False にしたまま終了するとイベントが動作しなくなるマクロ終了前に必ず True に戻す
エラーで途中終了しても元に戻らないことがあるOn Error で必ず EnableEvents = True を保証すること
グローバル設定Application.EnableEvents はすべてのブック・シートに影響する

🔷 安全なテンプレート(エラー対応付き)

Sub 安全なイベント制御マクロ()
On Error GoTo エラー処理

Application.EnableEvents = False

' ここに処理を書く
Range("A1").Value = "イベント無効中に書き込み"

正常終了:
Application.EnableEvents = True
Exit Sub

エラー処理:
MsgBox "エラー発生: " & Err.Description
Resume 正常終了
End Sub

🔷 他の制御系プロパティとの組み合わせ

プロパティ目的
Application.ScreenUpdating = False画面更新を停止(高速化)
Application.Calculation = xlCalculationManual再計算を手動化(高速化)
Application.EnableEvents = Falseイベント発火を停止(暴走防止)

これらをまとめて制御すると、高速で安全な処理が実現できます。


🔷 まとめ

項目内容
プロパティ名Application.EnableEvents
Boolean(True / False)
既定値True(イベントは通常有効)
目的マクロ実行中のイベント発火を一時停止
使用例Application.EnableEvents = False
注意点マクロ終了前に必ず True に戻すこと

✅ よくある使い方(定型パターン)

Sub マクロ処理()
With Application
.EnableEvents = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With

' 重たい処理

With Application
.EnableEvents = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub
タイトルとURLをコピーしました