エクセルVBAでD列の時刻に基づきE列に2時間前の時刻を自動計算する方法

Visual Basic

エクセルでD列に入力された時刻をもとに、E列に2時間前の時刻を自動計算し、D列が消去された際にE列も消えるVBAコードを解説します。関数を使用せずにVBAで実現する方法について、詳細に説明します。

1. VBAで2時間前の時刻を計算するコード

まず、VBAを使用して、D列に入力された時刻から2時間前の時刻を計算し、E列に表示させる方法を解説します。以下のコードをVBAエディタに入力してください。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("D:D")) Is Nothing Then
        If IsDate(Target.Value) Then
            Application.EnableEvents = False
            Target.Offset(0, 1).Value = Target.Value - TimeSerial(2, 0, 0)
            Application.EnableEvents = True
        End If
    End If
End Sub

このコードでは、D列に時刻が入力されると、E列にその2時間前の時刻を計算して表示します。`TimeSerial(2, 0, 0)`を使って、2時間を引いています。

2. D列が消去された際にE列も消える設定

次に、D列の内容が消去されると、E列の内容も一緒に消えるように設定します。以下のコードを同じようにVBAエディタに追加します。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("D:D")) Is Nothing Then
        If Target.Value = "" Then
            Target.Offset(0, 1).ClearContents
        ElseIf IsDate(Target.Value) Then
            Application.EnableEvents = False
            Target.Offset(0, 1).Value = Target.Value - TimeSerial(2, 0, 0)
            Application.EnableEvents = True
        End If
    End If
End Sub

このコードでは、D列が空白になった場合、E列も自動的に消去されるように`ClearContents`を使用しています。

3. 使用方法と注意点

上記のVBAコードは、D列に時刻を入力するとE列に2時間前の時刻が表示され、D列を消去するとE列も消えるという動作を実現します。このコードは、D列が時刻形式で入力されている場合にのみ動作しますので、入力ミスを防ぐためにD列には時刻形式を設定しておくと良いでしょう。

まとめ

このVBAコードを使用することで、D列に時刻を入力した際にE列に自動的に2時間前の時刻を表示し、D列が消去されるとE列も消える動作を簡単に実現できます。関数を使わずにVBAを使ってこのような自動化をすることで、エクセル作業が効率化されます。

コメント

タイトルとURLをコピーしました