イベントマクロ 10回
数値を入力してそれを時間として使いたい場合に、イベントを利用して変換してみましょう。
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セルに対して行われることです。
つまりイベントが起きたら実行するコードで、再びイベントが起り、処理を実行する、そして再びイベント・・・という無限ループに入ってしまうのです。

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列に数値を入力すると、時間として表示されます。
