トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! > 揺るぎない力編: 第17話「次は、おまえだ!」3/4 :…来年になれば

やってみよう!Excel VBAで業務改善! 新たなる挑戦編|第17話 「次は、おまえだ!」

…来年になれば

「…来年になれば、また数名、新人を確保できる。
星に開発だけをさせておくのではなく、新人の教育をやらせてチームの生産性を上げたほうが、
部としては得策か………。
少し早いが……彼を来年、主任に推薦するか…」
岩田部長はパソコンの電源を切ると、帰り支度を始めました。


「よいしょっと。やっぱりコタツはあったかいわね~~」 泉先輩は出してきたばかりのコタツにもぐり込みながら、テキストをパラパラとめくります。


Private Sub Worksheet_Change(ByVal Target As Range)
    Target.Value = Target.Value + 1
End Sub


Excelの画面に戻って、任意のセルに「1」と入力します。
すると「1」が入力されたというイベントが発生して「Worksheet_Change」が起動されます。
「Worksheet_Change」では、「編集されたセルの値を+1する」という命令が記述されていますので、
セルの値は「2」になります。
「Worksheet_Change」によってセルの値が変更されましたので、Excelは再度
「セルの値が変更された」というイベントを発生させます。

こうしたイベントの連鎖を防ぐには、Excelのイベント発生を抑止するプロパティを設定します。
ApplicationオブジェクトのEnableEventsプロパティにFalseを設定すると、それ以降、
Excelのイベントは発生しなくなります。


Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Target.Value = Target.Value + 1
    Application.EnableEvents = True
End Sub


EnableEventsプロパティがFalseのままだと、Excel上で一切のイベントが抑止されますので、
プロシージャの最後でTrueに戻すのを忘れないでください。


                                                    < スタンダード公式テキスト P65~66 >
一覧にもどる