如何在Excel单元格中找到先前值和当前值之间的差异?

时间:2014-12-20 09:41:05

标签: excel-vba range worksheet-function vba excel

A1 =时间开始使用cntrl + shift +,显示凌晨4:00

B1 =时间结束时使用cntrl + shift +显示上午8:00

C1 =使用= MOD(B1-A1,1)之间的时间,显示4:00:00

D1 =使用= C1 * 1440将单元C1转换为分钟的时间,其显示240分钟

E1 = D1新值 - D1旧值(例如:如果旧值为240,新值为360,则360-240 = 120。)

大胆是我想要的,我只能希望你们能理解我想要完成的事情。如果需要,我会尽量让自己更清楚。提前谢谢!

1 个答案:

答案 0 :(得分:1)

为了找到输入的旧值和旧值之间的差异,例如,在“D1”(在单元格更改事件中)并显示单元格“E1”,一般解决方案显示在以下代码片段中(参见清单1) ):

清单1

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Column = 4 And Target.Row = 1 Then
        'new val
        newVal = Range("D1").Value
        Application.EnableEvents = False
        Application.Undo
        'old val
        oldVal = Range("D1").Value
        Range("D1").Value = newVal
        'diff between new and old val
        Range("E1").Value = newVal - oldVal
        Application.EnableEvents = True
    End If
End Sub

与您的特定情况相关(假设通过在单元格“A1”或“B1”中按组合CTRL+SHIFT+:(或只是键入)输入时间,修改后的代码段如清单2所示。

清单2

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Row = 1 And (Target.Column = 1 Or Target.Column = 2) Then
        'new val
        a1 = Range("A1").Value
        b1 = Range("B1").Value
        newVal = Range("D1").Value

        'disable events and undo
        Application.EnableEvents = False
        Application.Undo
        'old val
        oldVal = Range("D1").Value

        'diff between new and old val
        diff = newVal - oldVal

        Range("A1").Value = a1
        Range("B1").Value = b1
        Range("E1").Value = diff

        're-enable events
        Application.EnableEvents = True
    End If
End Sub

另外,如果您使用公式表示在单个单元格中输入的=MOD(B1-A1,1)*1440(例如“D1”)而不是使用这对夫妇(“C1”,则可以简化您的工作表计算。 “和”D1“)。此外,整个计算可以仅在VBA模块中执行,根据“A1”和“B1”中的条目更新“E1”值(在这种情况下不需要“C1”和“D1”)。

希望这会有所帮助。最好的问候,