Excel 使用 NOW 函数自动记录操作时间
in 折腾软件 with 0 comment

Excel 使用 NOW 函数自动记录操作时间

in 折腾软件 with 0 comment

前言

之前做了一个 Excel 表格来跟踪项目的执行情况,使用✓、ing、✕、来标记各节点的进度,再添加条件格式自动填充底色使得更加一目了然。
20201106110431.png
后来老大建议再做一个甘特图来跟踪,Excel 做甘特图容易,有很多现成的模板,但是得记录每个节点开始和结束的时间。想偷懒的我必不可能手动记录,于是想用函数来实现。

思路

一个没有完成的节点默认是标记的是 ✕,开始处理时改成 ing,此时记录开始时间,节点完成后改为 ✓,此时记录完成时间。
看上去很容易,使用IF判断,再使用NOW填写时间就可以了。开始时间的函数如下:

=IF(A2="ing",NOW(),B2) #如果A2是ing,记录现在的时间,如果不是,等于本身,不发生变化

Video_20201106113136.gif

但是这样有一个问题,NOW函数是动态函数,每次表格刷新时间都会变化,显然无法使用。
于是需要再嵌套一层IF函数,判断开始时间是否为空,如果为空就输入现在的时间,否则等于他本身:

=IF(A2="ing",IF(B2="",NOW(),B2),IF(A2="✓",B2,""))

效果如下:

Video_20201106140515.gif
现在更改表格、关闭重新打开都不会使记录的时间发生变化,并且把节点状态改为 ✕ (未完成)后,会自动清空记录的时间,达到了我想要的效果。

函数解释

开始时间:

=IF(A2="ing",IF(B2="",NOW(),B2),IF(A2="✓",B2,""))

完成时间:

=IF(A2="✓",IF(C2="",NOW(),C2),IF(A2="ing",C2,""))

外层 IF,用来判断节点状态是否为 ing (正在处理)。如果是,则执行内层第一个 IF,如果不是,则执行第二个 IF。
内层第一个 IF,判断开始时间是否为空值。如果是,则填入当前时间,如果不是,则等于他本身。这个判断用于表格刷新时,防止 NOW 函数更新时间。
第二个 IF,判断节点状态是否为 ✓(已完成)。如果是则不发生变化,如果不是,比如是 X(未开始),就把时间清空。
需要注意的是,因为函数有多次循环引用,需要在选项中打开迭代运算。
20201106141941.png

Responses