目标:
实现一个倒数计时器,可以在计时器的末尾添加时间扩展。
布局
对布局的洞察:
- 事件只是与该事件的特定时间相关的事件的下拉列表。(为此,我们只假设它是 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
。 因此,让我们插入一些数字:
NOW() NOW()-(TODAY()+D2) | ABS(NOW()-(TODAY()+D2)) ABS(NOW()-(TODAY()+D2)) + TIME(0,F2,0) | (倒计时值) | |
---|---|---|---|
101 | 0:10 0 | :25 | |
16:25 | −0:05 1 0:05 0 | :20 | |
00 0:00 | 0 | :15 | |
16:35 | 0:05 0:05 | 0: | 20 |
10 | 0: | 25 | |
45 0:15 | 0:15 | 0: | 30 |