Worksheet_Change 数値を時間として表示
イベントマクロ 10回
入力したり、変更したりした時にWorksheet_Changeイベントを利用
数値を入力してそれを時間として使いたい場合に、イベントを利用して変換してみましょう。
ChangeイベントでTargetを処理する
1. 今回時間を入力するセル範囲は、C2:C10 ですが、C列なので、Columns(3)とすることもできます。
9回では Intersect(Target, Columns(3)) のように使いました。
今回は、Intersect関数を使わずに、If Target.Column = 3 Then としましょう。
数値で値を入力したら、それをX時間と表示することにします。ここまでの、操作をコードで表します。
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 3 Then Target.Value = Target.Value / 24 End If End Sub
これで時間を表示できそうですが、ひとつ致命的な問題があります。それはイベントが起きた時にする処理が、Targetセルに対して行われることです。
つまりイベントが起きたら実行するコードで、再びイベントが起り、処理を実行する、そして再びイベント・・・という無限ループに入ってしまうのです。

Application.EnableEvents
2. この無限ループを避けるためのコードが Application.EnableEvents です。 はじめに、Application.EnableEvents = False とすることで、プロシージャ実行中のイベントを止めます。 つぎに、処理をします。最後にイベントを実行できるように、Application.EnableEvents = True として元の状態にもどします。

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 3 Then Application.EnableEvents = False Target.Value = Target.Value / 24 Target.NumberFormatLocal = "[h]""時間""" Application.EnableEvents = True End If End Sub
3. C列に数値を入力すると、時間として表示されます。
