我正在尝试为某一列[Task Status]
更改为完成时创建日期戳。以下代码在“状态”单元格更改为完成时成功创建日期戳。
=IF([Task Status])= "Complete",TEXT(NOW(),"mm/dd/yyyy"))
问题是,所有列[Task Status]
单元格都已完成,将显示实施公式的日期。我正在寻找一种解决方案,可以为以后的所有日期创建日期戳,并将过去的日期留空。
我已经尝试过这个,但是没有用:
=IF(NOW()<="7/31/2020","",IF([Task Status]="Complete",TEXT(NOW(),"mm/dd/yyyy")))
答案1
正如FlexYourData
所指出的,使用NOW()
将意味着它创建的所有日期/时间都会在每次对电子表格进行更改(几乎任何更改)时发生变化,因为NOW()
每次电子表格重新计算时都会重新计算。因此,每一天的日期都会不同,但一整天的时间也会发生变化。
您需要采用不同的方法来获得您几乎肯定希望的结果。
也就是说,公式中遇到的具体问题很容易解决。Excel 将日期和时间视为数字。每一天都比前一天高一个整数,因此今天 2020-08-02 是 44045,明天将是 44046。时间也在增加,但在值的小数部分。因此,此刻是 44045.33844,此刻是 44045.33876,依此类推,直到达到 44046 并继续增加。
您使用的表达式NOW()<="7/31/2020"
中的日期是字符串值,而不是数字。字符串的数值始终为 0。因此,您要求 Excel 查看(我们知道它将是一个大于 0 的数字)是否<= 0。自然,它会说不是,并根据该测试的结果NOW()
参数采取行动。FALSE
如果你DATEVALUE()
在函数中“包装”该日期,您的公式将按预期工作:
=IF(NOW()<=DATEVALUE("7/31/2020"),"",IF([Task Status]="Complete",TEXT(NOW(),"mm/dd/yyyy")))
这就是全部了。
解决如何NOW()
不稳定且不断变化又是另一回事。