【问题标题】:Excel Countdown Timer with Time Extensions带有时间扩展的 Excel 倒数计时器
【发布时间】:2021-06-27 03:46:09
【问题描述】:

目标:
实现一个倒计时计时器,可以在计时器结束时添加时间扩展。

The layout

对布局的洞察:

  • 事件只是与该事件的特定时间相关的事件的下拉列表。 (为此,我们假设它是 50 分钟。)
  • Round 1 Start是开始时间,由用户输入。
  • Round 1 End是使用excel函数的结束时间。 =IF(ISBLANK(C2),"",IFERROR(C2+VLOOKUP($A$2,Lookups!$A$2:$B$9,2), "Invalid"))
  • Remaining Time 是倒计时计时器,带有 excel VBA 以不断刷新它 =IFERROR(IF(NOW()-TODAY()-D2-TIME(0,F2,0)>0,"TIME IN ROUND",IFERROR(ABS((NOW()-TODAY())-D2)+IFERROR(TIME(0,F2,0),0),"")),"")
  • 延长时间是以分钟为单位的延长时间。

什么有效:
如果没有时间扩展,它会做它应该做的事情,当计时器到达 0:00:00 时,它会显示“TIME IN ROUND”消息。

什么不起作用: 添加时间扩展后,它永远不会达到 0:00:00,而是开始计数,如 here 所示。相反,它会在 Time Extension 乘以 2 后显示“TIME IN ROUND”消息。即使在弄乱了公式的时间扩展部分之后,这对我来说也从未正常工作过。

代码分解:
=IF(ISBLANK(C2),"",IFERROR(C2+VLOOKUP($A$2,Lookups!$A$2:$B$9,2), "Invalid"))
这将显示空白,直到开始时间单元格 (C2) 被填充。一旦开始时间被填满,就会引用事件来给出持续时间(50 分钟)。

=IFERROR(IF(NOW()-TODAY()-D2-TIME(0,F2,0)>0,"TIME IN ROUND",IFERROR(ABS((NOW()-TODAY())-D2)+IFERROR(TIME(0,F2,0),0),"")),"")
第一个 if 语句 NOW()-TODAY()-D2-TIME(0,F2,0)>0 这只是检查倒数计时器是否已到结束时间。
第二个 if 语句ABS((NOW()-TODAY())-D2)+IFERROR(TIME(0,F2,0),0) 是验证是否有时间扩展,将时间扩展值添加到结束时间。

【问题讨论】:

  • 如果你想让任何人帮助你,你必须帮助我们了解你在做什么。 (1)用英语高层次地描述你想要完成的事情。 (2)解释D2F2是什么。 (你说“唯一需要的参数是开始时间”,那么为什么要指这两个其他单元格?) (3)什么是“时间延长”? (4) 在技术层面上描述公式应该如何做它应该做的事情。 (5)您使用IFERROR 3 次!  您预计会出现什么错误? …(续)
  • (续)...  (6)您是说这有时有效,还是以前有效?如果是这样,请明确地说出来。 (7)用英语(在技术层面)解释你在做什么。 (“add time extensions”是什么意思?)  (8)用英语描述正在发生的事情。如果绝对有必要补充您的描述,请添加实际说明某些内容的插图。 (您当前的图片没有帮助。 第一个是空白的! 应该有一些动画那里,这对我来说是太快还是太慢?  …(续)
  • (续)... 第二张图片没有帮助,因为您没有显示哪个单元格是D2,哪个单元格是F2,而且我不知道预期的内容 /想要的结果是。)  (9)您是否尝试过使用“评估公式”进行调试? … … … … … … … … … … … … … … … … … … … … … … … 请勿回复; edit你的问题,让它更清晰、更完整。
  • @Scott 我收到了很多这样的问题,并澄清了很多细节。希望对您有所帮助。
  • 是的,这个问题现在很清楚了;谢谢你。我已经发布了答案。

标签: excel countdowntimer


【解决方案1】:

简短的回答:

ABS() 是问题所在。 括号的特殊位置掩盖了问题。

更长的解释:

ABS((NOW()-TODAY())-D2)
    ↑             ↑

标记的括号没有任何用处。 你还不如说

ABS(NOW()-TODAY()-D2)

这样说会更清楚

ABS(NOW()-(TODAY()+D2))

其中TODAY()+D2 是事件的实际(预定)结束时间。 例如,如果D2 显示为16:30:00, 实际存储在工作表中的 1900 年 1 月 0 日 16:30:00 (这是真的 1899 年 12 月 31 日 16:30:00)。 而且,如果今天是 2021 年 6 月 27 日,那么 TODAY() 就是 2021 年 6 月 27 日 00:00:00, 所以TODAY()+D2 是 2021 年 6 月 27 日 16:30:00。

所以NOW()-(TODAY()+D2) 是实际(预定的)结束时间有多远 事件的时间是从当前时间开始的。 在事件的(预定的)结束时间之后,这是积极的。 在事件的(预定)结束时间之前,这是负数。 (事件的(预定)结束时间,它为零, 正如您对倒数计时器的期望一样。)

你想展示一个积极的(但不断减少的)时间 在截止日期之前(然后在截止日期归零, 以及截止日期后的“TIME IN ROUND”消息)。 因此,采用绝对值具有一定的意义。 但是你取错了东西的绝对值。 考虑:如果 D2 是 16:30:00 并且 F2 是 15, 这意味着截止日期实际上是 16:45。 现在,让我从你的公式中取一点大一点, 如上所示更改括号,删除IFERROR 并添加空格以清楚起见:

ABS(NOW()-(TODAY()+D2))   +   TIME(0,F2,0)

在 16:30 之前,这可以正常工作。 NOW()-(TODAY()+D2) 是(预定的)结束时间(16:30)有多远 从现在开始, 作为一个,该值逐渐接近零(随着时间的推移)。 因此,绝对值是一个正值,正在减少(趋向于零)。

但是,在 16:30,NOW()-(TODAY()+D2) 变为零, 然后它变成一个增加的正值。 当然,ABS(<i>x</i>) 等于 xx 为正数(或零)时。 所以让我们插入一些数字:

NOW() NOW()-(TODAY()+D2) ABS(NOW()-(TODAY()+D2)) ABS(NOW()-(TODAY()+D2)) + TIME(0,F2,0)
     (the countdown value)
16:20 −0:101 0:10 0:25
16:25 −0:051 0:05 0:20
16:30 0:00 0:00 0:15
16:35 0:05 0:05 0:20
16:40 0:10 0:10 0:25
16:45 0:15 0:15 0:30

__________
1 这不是一个合法的独立价值, 因为 Excel 不喜欢负数。 但是在公式中间也可以。

当然,在 16:45 之后,最外面的 IF 会覆盖所有这些数学内容, 并且您会收到“TIME IN ROUND”消息。

建议

您为什么要查看TODAY()+D2(或NOW()-(TODAY()+D2))? 这是事件的(最初)预定结束时间。 您关心活动的延长结束时间(截止日期),即

TODAY()+D2+TIME(0,F2,0)

好的,如果F2 为负数或非数字,TIME(0,F2,0) 会抛出错误。 因此,如果用户可能会在F2 中输入“尽快”之类的内容, 你需要通过IFERROR() 来防范。

NOW()-TODAY()-D2-TIME(0,F2,0)&gt;0 难以阅读。 相当于

NOW() > TODAY()+D2+TIME(0,F2,0)

(IMO)很容易理解为 “将当前时间与事件的扩展结束时间进行比较”。 (此外,它还有一个问题:它使用 TIME(0,F2,0) 而没有 IFERROR()。)

公式的右半部分比它需要的复杂得多。 我们可以将其简化为

=IF(NOW() > TODAY()+D2+IFERROR(TIME(0,F2,0),0),  "TIME IN ROUND",  (TODAY()+D2+IFERROR(TIME(0,F2,0),0)) - NOW())

但是……

上面有一个 29 字符长的重复子表达式 (TODAY()+D2+IFERROR(TIME(0,F2,0),0))。 重复的子表达式会影响可读性,尤其是当它们很长时。 事件的延长结束时间(截止日期)是一个有意义的值。 您可能希望将其显示在自己的列中。 但是,如果不是这样,帮助列怎么样? 放

=TODAY()+D2+IFERROR(TIME(0,F2,0),0)

进入单元格Z2(并分段/向下填充以覆盖列Z)并使用

=IF(NOW() > Z2,  "TIME IN ROUND",  Z2 - NOW())

E2。 (然后,您可以根据需要隐藏列Z。)

【讨论】:

    猜你喜欢
    • 2013-09-12
    • 2021-03-29
    • 1970-01-01
    • 2013-01-26
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    相关资源
    最近更新 更多