具有示例数据的电子表格链接为here。
假设您在Excel中将3个日期“ 4/1/2015”,“ 6/30/2015”和“ 5/1/2016”设置为“日期”单元格格式。
您可以使用逻辑运算符(等)直接比较日期。如果单元格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试图在将日期存储为Doubles和向用户显示他们希望看到的内容之间走一条细线。
Excel具有内置类型强制。 TC让您无需过于严格地处理数据类型即可执行操作。基本上,如果Excel可以弄清楚您要做什么,它就会做到。如果您要求添加两个字符串,则"1" + "1"
Excel会将每个字符串强制转换为数字,以便它可以执行操作并为您提供2
。如果您问"1" + "a"
,您将收到#VALUE错误,因为Excel无法找出如何将“ a”强制转换为有效的操作数。
比较不会触发强制。因此="1"=1
将返回False-字符串不等于数字,并且进行比较不会触发Excel将任一值强制转换为其他类型。
在您的情况下,A1>="04/01/2015"
似乎是Excel强制将看起来像日期的日期变为实际日期的绝佳机会。但事实并非如此。这就是它的工作方式。但是在日期上加上零(记住只是Double),将其强制为日期,然后将A1与强制日期的内容进行比较。
日期的字符串文字似乎可以在许多环境(例如SQL Server)中使用。但它们通常不在Excel中。 IMO最好使用A1>=DATE(2015,4,1)
中的DATE()函数。