エクセルVBAで使用するコードの備忘録。値が変更された時などに自動で発生するイベントプロシージャの無効・有効を切り替えるコード。イベントプロシージャはユーザー操作に対して処理をする際には便利ですが、高速で大量の処理をVBAから行う場合に発生すると動作の遅延を招くのでそのような場合には無効にする必要があります。
イベントプロシージャとは?
イベントプロシージャとはワークシート上で、
- セルの値が変更されたとき
- セルがクリックされたとき
- 選択範囲が変更されたとき
などの操作が行われた場合に発生する処理(関数)のことです。
例えば、セルの値が変更されたときにそのセルの背景色を自動で変更するなどの動作を実現したい場合には、「Worksheet_Change」という関数に背景色を変更するという処理を書き込みます。この「Worksheet_Change」という関数がイベントプロシージャと呼ばれるもので、この関数の場合はワークシートに変更が加えられるとその都度発生します。
見ての通りイベントプロシージャはユーザーの操作に応じて処理を実行することができるので、エクセルをインターフェースとしてツールを作成する場合にはとても便利な機能です。ただ、VBAでセルの値を大量に変更する処理を行う際にも、この「Worksheet_Change」というプロシージャが動くので、コードの書き方によっては
セルの値を変更⇒Worksheet_Changeの実行⇒処理続行
というプロセスが繰り返し発生して動作が遅くなってしまうことがあります。
イベントプロシージャを無効にする
このような場合にはイベントプロシージャの処理を一時的に無効化することが有効です。VBAによろコード実行中にイベントプロシージャを無効にするには次のようなコードを利用します。
イベントプロシージャを無効にする
Application.EnableEvents = False
ちなみにわかると思いますが、再度有効にする場合はFalseではなくTrueを設定します。
イベントプロシージャを有効にする
Application.EnableEvents = True
このようなコードを挟むことで、処理の実行中にイベントプロシージャの発生をコントロールすることが可能です。