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)
。