具有时间扩展的 Excel 倒数计时器



目标:
实现一个倒数计时器,可以在计时器的末尾添加时间扩展。

布局

对布局的洞察:

  • 事件只是与该事件的特定时间相关的事件的下拉列表。(为此,我们只假设它是 50 分钟。
  • 第 1 轮开始是开始时间,由用户输入。
  • 第 1 轮结束是使用 excel 函数的结束时间。=IF(ISBLANK(C2),"",IFERROR(C2+VLOOKUP($A$2,Lookups!$A$2:$B$9,2), "Invalid"))
  • 剩余时间是带有 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,而是开始计数,如下所示。相反,它将在时间扩展乘以 2 后显示"四轮时间"消息。即使在弄乱了公式的时间延长部分之后,这对我来说也从未正确工作过。

代码细分:
=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)正在验证是否有时间延长,请将时间扩展值添加到结束时间。

简短的回答:

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)实际(计划的)结束时间有多远 的事件是从当前时间开始的。事件的(计划的)结束时间之后,这是积极的。事件的(计划的)结束时间之前,这是负数。 (事件的(计划的)结束时间,它是零, 正如您对倒数计时器所期望的那样。

您想显示一个正(但不断减少)的时间 在截止日期之前(然后在截止日期零, 以及您在截止日期之后的"回合时间"消息)。 因此,取绝对值是有一定道理的。 但是你拿错了东西的绝对值。 考虑一下:如果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)变为零, 然后它成为一个递增的正值。 当然,当x为正(或零)时,ABS(x)等于x。 因此,让我们插入一些数字:

16:20−0:0:−0:05 1 0:16:30 0:0:16:40 0:10 0:16:0:
NOW()NOW()-(TODAY()+D2)ABS(NOW()-(TODAY()+D2))ABS(NOW()-(TODAY()+D2)) + TIME(0,F2,0)
(倒计时值)
10110 0:25
16:2505 0:20
00 0:000:15
16:3505 0:050:20
100:25
45 0:15150:30

最新更新