トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! > 揺るぎない力編: 第22話「4人で勉強会!?」3/4 :冷ややかな瞳

やってみよう!Excel VBAで業務改善! 新たなる挑戦編|第22話 「4人で勉強会!?」

冷ややかな瞳

部屋の隅にちょこんと座っていた岬さんは、一連のやり取りを冷ややかな瞳で見つめいていました。

「(…ちょっと、ちょっと。何なのよこの人。
後から入ってきたわりには、ズーズーしいんじゃないの…??)」
彼女は心もち、ふくれっ面です。

泉先輩はスタンダードのテキストをパラパラとめくり、あるページを指さしました。

「ここなんか読んでても、さっぱりわからなかったんですけど…」

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 >

一覧にもどる