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

时间:2015-08-05 16:47:51

标签: excel date excel-formula

带有示例数据的电子表格已关联here

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

您可以使用逻辑运算符(<,>等)直接比较日期。如果" 4/1/2015"在Cell A1和" 6/30/2015"在单元格A2中,此公式{​​{1}}评估为"错误"。

但是,您无法将日期与字符串文字进行比较(即" 3/31/2015")。如果" 4/1/2015"在单元格A1中,此公式{​​{1}}始终评估为"错误"。

如上所述,为什么通过对字符串文字附加算术运算呢? Excel允许比较以不同格式存储的日期?例如,如果" 4/1/2015"在单元格A1中,此公式{​​{1}}将评估为" True"。

1 个答案:

答案 0 :(得分:8)

日期存储为双倍 - 从1899年12月31日开始的天数加上一个小数,即从午夜起经过的时间百分比。现在,我在42221.50049输入此信息,这是自1899年以来的42,221天以及中午之后的一点点。

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

Excel具有内置类型强制。 TC让您在不严格掌握数据类型的情况下做事。基本上,如果Excel可以弄清楚如何做你所要求的,它就会做到。如果您要求添加两个字符串,"1" + "1" Excel会将每个字符串强制转换为一个数字,以便它可以执行操作并为您提供2。如果你问"1" + "a",你会得到一个#VALUE错误,因为Excel无法弄清楚如何强迫" a"进入一个有效操作数的东西。

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

在您的情况下,A1>="04/01/2015"似乎是一个很好的机会,可以让Excel强制查看实际日期的日期。但它并没有。这就是它的工作方式。但是在日期中添加零(记住只是一个双倍),将其强制转换为日期,并且您将A1与被强制约会的日期进行比较。

日期的字符串文字似乎适用于SQL Server等许多环境。但他们通常不在Excel中。 IMO最好使用DATE()函数,如A1>=DATE(2015,4,1)中那样。