【问题标题】:How to find a difference between previous and current values in Excel Cell?如何在 Excel 单元格中查找先前值和当前值之间的差异?
【发布时间】:2014-12-20 09:41:04
【问题描述】:

A1 = 使用 cntrl+shift+ 显示 4:00 AM 的时间开始

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。)

粗体是我想要的,我只能希望你们能理解我想要完成的事情。如果需要,我会尽量说得更清楚。提前致谢!

【问题讨论】:

  • 新值在哪里?在下一行 (D2)?
  • 新值将在 E1 上,其中包含从 D1 的新值中减去 D1 的旧值。
  • 对不起,我还没关注。 “D1 的新值”是什么意思? D1 怎么可能有多个值?
  • 如果我在 B1 中将结束时间更新为上午 9:00,C1 将制定并输出 5:00:00。然后 D1 将获得该值并乘以 1440 以转换为分钟,然后是 D1 = 300。我希望 E1 从 D1 的新值(300)中减去 D1 的旧值(240),然后输出E1 = 60 分钟。
  • 如果我理解正确,这将需要 VBA 解决方案。我建议您研究工作表事件,开发一些代码,然后在此处发布问题/问题。

标签: excel range worksheet-function vba


【解决方案1】:

为了找到输入的新旧值之间的差异,例如在“D1”中(在单元格更改事件中)并将其显示在单元格“E1”中,一般的解决方案如下代码sn-p所示(参见清单 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+:(或仅键入)输入时间,修改后的代码 sn-p 显示在清单 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”)。

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

【讨论】:

  • 你好亚历克斯!只要将减去的值输入E1,这就是有效的。不幸的是,只有当我在 D1 中手动输入一个数字时,E1 和 D1 才有效,它忽略了 A1、B1 和 C1。 D1=C1*1440,输出空白。这在大多数情况下都有效,但不想采用公式化单元格的值...
  • @Serendipitepic:你好!正如我的解决方案中所述,您可以使用与您的案例相关的任何逻辑来扩展此代码 sn-p。清楚地展示了这个概念:使用 Worksheet_Change 事件和目标,其中可能包括单元格 A1、B1 和 C1 中的任何更改。祝你的项目好运。亲切的问候,
  • 抱歉,我不知道如何将单元格 A1、B1 和 C1 中的更改包含到此代码中...
  • 请查看与您的案例相关的扩展答案。最好的问候,
  • @Serendipitepic,如果您找到解决问题的答案,请选择它作为答案。它有多种用途,其中大部分是当人们搜索问题时,他们可以查看它是否已被回答,并且在搜索时知道它非常有用,可以帮助未回答的问题找出他们确实有答案,只有在通过 cmets 阅读 5 分钟。此外,很高兴看到您的回答受到赞赏,它会授予您和回答者的声誉积分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多