【问题标题】:Excel formula - Calculate Days, Hours, Minutes and seconds between 2 timestampsExcel 公式 - 计算 2 个时间戳之间的天数、小时数、分钟数和秒数
【发布时间】:2017-05-03 22:13:26
【问题描述】:

我有一个 vba 脚本,当用户像这样运行时,它会在单元格 A8 中留下一个时间戳:

ActiveSheet.Range("A8").Value = Format(Now(), "dd/mm/YYYY hh:mm:ss")

这会在单元格 A8 中显示以下内容(格式为日期:

10/12/2016  9:15:10 AM

接下来,我希望能够确定自用户上次运行宏/vba 代码以来的天数、小时数、分钟数和秒数。

我还在单元格 B8 中使用 =NOW() 来捕获当前日期/时间。

单元格 B8 也被格式化为日期并显示如下:

12/18/16 12:45

我的公式应该将 A8 中的时间戳与单元格 B8 中的当前时间和日期进行比较。

=INT(A8-B8)&" days "&TEXT(A8-B8,"h"" hrs ""m"" mins """)

我注意到这里的日期格式不一致,我不知道这是否重要?

由于某种原因,我没有得到想要的结果,我的公式出现了这个错误:

价值!

请谁能告诉我哪里出错了?

另外,如果可能的话,我不想像这样一次显示天、小时、分钟和秒:

0 days, 0 hours, 0 minutes, 0 seconds

我真正想要的是如果时间戳小于 60 秒,则显示如下:

55 seconds ago

Then something like:

20 minutes ago

then:

1 hour ago

then :

2 days ago

谢谢

【问题讨论】:

  • 您不能从 A8 中减去 B8。它们是文本值。
  • @YowE3K 谢谢,但那是 vba。我试图把它变成一个公式,以便单元格总是在计数。使用 vba 解决方案,不会像公式自动更新单元格一样

标签: excel vba date datediff


【解决方案1】:

首先,它应该是B8-A8,而不是相反,因为 B8 应该大于 A8。此更改应该使您的初始公式有效。

第二,你想要的公式:

=IF(B8-A8>=1,INT(B8-A8)&" days ago",IF(HOUR(B8-A8)>=1,HOUR(B8-A8)&" hours ago",IF(MINUTE(B8-A8)>=1,MINUTE(B8-A8)&" minutes ago",IF(SECOND(B8-A8)>=1,SECOND(B8-A8)&" seconds ago", " just now"))))

p.s.:根据 @YowE3K 的 cmets,要使其正常工作,您的单元格 A8B8 应设置为 Date 类型,否则您应在公式中使用正确的格式对其进行格式化。第一个选项应该更容易。

【讨论】:

  • 我认为 OP 需要将 ActiveSheet.Range("A8").Value = Format(Now(), "dd/mm/YYYY hh:mm:ss") 更改为 ActiveSheet.Range("A8").Value = Now() 才能使您的答案起作用,但我强烈建议他们无论如何都这样做。 (如果他们不这样做,他们将需要在公式中使用 (DATEVALUE(A8)+TIMEVALUE(A8)) 而不仅仅是 A8。)
  • @YowE3K 好话。我认为范围已经格式化为Date 类型。无论如何,我建议 OP 考虑到这一点。
  • 是的 - Excel 很奇怪 - 如果单元格已经格式化为日期,将值设置为 Format(Now(), "dd/mm/YYYY hh:mm:ss") 无论如何都会将其转换回日期(实际上与将其设置为 @987654332 相同@) - 但如果在执行那段代码之前没有将其格式化为日期,Excel 会将其格式化为文本并使该值不可用。
猜你喜欢
  • 1970-01-01
  • 2019-09-10
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
相关资源
最近更新 更多