Excel if语句中的逻辑测试如何计算不同格式的日期?



带示例数据的电子表格链接在这里。

假设您有3个日期"4/1/2015","6/30/2015"one_answers"5/1/2016"设置为Excel中的日期单元格格式。

可以使用逻辑运算符(<、>等)直接比较日期。如果单元格A1中为"4/1/2015",单元格A2中为"6/30/2015",则公式=IF(A1>A2,"True","False")的计算结果为"False"。

但是,您不能将日期与字符串字面值(即:"3/31/2015")。如果单元格A1中为"4/1/2015",则此公式=IF(AND(A1>="4/01/2015",A1<="6/30/2015"),"True","False")的计算结果始终为"False"。

有了上面的说明,为什么通过向字符串字面值附加算术运算;Excel允许以不同格式存储的日期之间的比较?例如,如果单元格A1中为"4/1/2015",则此公式=IF(AND(A1>="4/01/2015"+0,A1<="6/30/2015"+0),"True","False")将计算为"True"。

日期存储为Double -从1899年12月31日开始的天数加上一个小数,即从午夜开始经过的时间百分比。现在,我输入的是42221.50049,也就是从1899年到现在的42221天,刚好在中午之后。

您看到日期格式只是因为您将日期格式应用于该单元格。它仍然是一个数字。但是日期有点特别。日期也显示在Excel的公式栏中,不是作为数字,而是作为日期。其他格式化的数字不会以这种方式显示。Excel正试图在将日期存储为double和向用户显示他们期望看到的内容之间走一条很好的线。

Excel有内置的类型强制转换。TC让你不用对数据类型过于严格就能做事情。基本上,如果Excel能弄清楚如何做你要求的事情,它就会做。如果您要求添加两个字符串,"1" + "1" Excel将强制这些字符串中的每个字符串为一个数字,以便它可以执行操作并给您2。如果你问"1" + "a",你会得到一个#VALUE错误,因为Excel不知道如何强制"a"成为一个有效的操作数。

比较不会触发强制转换。因此,="1"=1将返回False -字符串不等于数字,并且进行比较不会触发Excel将其中任何一个值强制为不同的类型。

在您的情况下,A1>="04/01/2015"似乎是Excel将看起来像日期的内容强制转换为实际日期的绝佳机会。但事实并非如此。这就是它的工作方式。但是将0添加到日期(记住这只是一个Double类型),将其强制转换为日期,然后将A1与被强制转换为日期的内容进行比较。

日期的字符串字面值似乎在很多环境中都有效,比如SQL Server。但在Excel中通常不会。在我看来,最好使用DATE()函数,如A1>=DATE(2015,4,1)所示。

最新更新