Excel if语句中的逻辑testing如何评估不同格式的date?

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

假设您有3个date“4/1/2015”,“6/30/2015”和“5/1/2016”在Excel中设置为date单元格格式。

您可以使用逻辑运算符(<,>等)直接比较date。 如果“A1/1/2015”在单元格A1中,“6/30/2015”在单元格A2中,则此公式=IF(A1>A2,"True","False")评估为“False”。

但是,您不能将date与string文本进行比较(即“2015/3/31”)。 如果“A1/1/2015”在单元格A1中,则该公式=IF(AND(A1>="4/01/2015",A1<="6/30/2015"),"True","False")总是评估为“假”。

如上所述,为什么通过对string文字附加算术运算, Excel允许以不同格式存储date之间的比较? 例如,如果“A1/1/2015”在单元格A1中,则此公式=IF(AND(A1>="4/01/2015"+0,A1<="6/30/2015"+0),"True","False")将评估为“真”。

date存储为双精度 – 1899年12月31日以来的天数加上一小部分,即自午夜以来经过的时间的百分比。 现在我打字的时间是42221.50049,这是1899年以来的42,221天,中午之后的一小时。

您只会看到一个date格式,因为您有一个date格式应用于该单元格。 这仍然是一个数字。 但date有点特别。 date还显示在Excel的公式栏中,不是作为数字,而是作为date。 其他格式化的数字不显示这种方式。 Excel正试图在存储date(如双打)和向用户展示他们期望看到的内容之间划清界限。

Excel有内置types的强制。 TC让你对数据types没有超级严格的做事。 基本上,如果Excel可以弄清楚如何去做你所要求的,那么就可以做到。 如果您要求添加两个string, "1" + "1" Excel将强制每个string的数字,以便它可以执行操作,并给你2 。 如果你问"1" + "a" ,你会得到一个#VALUE错误,因为Excel无法弄清楚如何强制“a”成为一个有效的操作数。

比较不会引发强制。 所以="1"=1将返回False – 一个string不等于一个数字,并且使比较不会触发Excel将任一值强制为不同的types。

在你的情况下, A1>="04/01/2015" 2015年A1>="04/01/2015"似乎是一个很好的机会让Excel强制将date看作实际date。 但事实并非如此。 这只是它的工作方式。 但是在date中加上零(记住只是一个Double),将它强制转换成一个date,然后把A1与被强制的date进行比较。

date的string文字似乎在许多像SQL Server一样的环境中工作。 但他们通常不在Excel中。 最好是IMO,使用DATE()函数,如A1>=DATE(2015,4,1)