Graham使用一个引用两个单元格B1和C1的公式。该公式所做的全部是返回一个单元格的值,如= IF(A1 = 1,IF(B1> C1,B1,C1))所示。 B1和C1通常都包含日期,但有时其中一个或两个都可能为空。如果它们都为空,则返回的值(因为它们为空,所以为0)显示为1/0/1900。当两个单元格都为空时,Graham希望公式返回空白值,而不是0。

有几种方法可以满足这种需求。不过,首先让我们从Graham的示例公式开始:

=IF(A1=1, IF(B1>C1, B1, C1))

该公式有点“不完整”,因为它没有提供如果A1不包含值1时应返回的内容。如所写,如果A1包含2(或除1以外的任何其他值),则该公式将返回“ FALSE ”。因此,让我们稍微修改一下公式,以使如果A1不为1,它将返回一个“空白”值,如下所示:

=IF(A1=1, IF(B1>C1, B1, C1), "")

接下来,关键是要了解“ B1> C1”中发生了什么

|比较。当然,日期在内部存储为数字值(即序列号)。如果B1包含的日期比C1更新,则B1中的序列号将大于C1中的序列号。

除此之外,B1和C1中数据的特性决定了比较(>)的工作方式。

。如果两个单元格都包含数字值(包括日期),则比较将按预期进行。

。如果两个单元格中的任何一个包含文本值,则即使两个单元格中的一个包含数字值,也将这两个单元格视为包含文本值。

。如果单元格之一为空,则将该单元格视为包含值0。

基于此,如果一个单元格包含一个日期而另一个单元格为空,则等效于将序列号(日期)与0(空单元格)进行比较,因此序列号将始终大于空单元格。如果两个单元格都为空,则它们都被视为包含0,因此两者相等。

因此,假设在Graham的公式中,单元格A1包含值1,单元格B1为空,单元格C1为空。这是Excel如何“翻译”公式的方式:

这就是Graham看到公式返回0的原因,并且当0被视为日期序列号时,它显示为1/0/00(或1/0/1900)。

=IF(A1=1, IF(B1>C1, B1, C1), "")

=IF(1=1, IF(B1>C1, B1, C1), "")

=IF(B1>C1, B1, C1)

=IF(0>0, B1, C1)

=C1 =0

为避免这种情况,您需要检查B1和C1是否都为空。

有许多方法可以完成。考虑他的公式的这种变化:

此变体添加了一个IF语句,以查看添加到C1的B1是否等于0,因为它们都为空白,因为在这种情况下Excel认为空白和0是等效的,所以这两个都是空白。缺点是,如果B1或C1包含文本值,则公式将返回#VALUE错误。

=IF(A1=1, IF((B1+C1=0), "", IF(B1>C1, B1, C1)), "")

更好的变化可能如下:

在这种化身中,IF语句使用AND函数确定B1和C1是否均为0。这也解决了潜在的#VALUE错误问题。

=IF(A1=1, IF(AND(B1=0,C1=0), "", IF(B1>C1, B1, C1)), "")

如果您真的想检查B1和C1是否都为空,则需要依靠其他方法。一种方法是使用COUNTA函数:

如果您知道B1和C1永远不会同时包含文本值,您也可以在上述公式中使用COUNT函数代替COUNTA函数。

=IF(A1=1, IF(COUNTA(B1:C1)=0, "", IF(B1>C1, B1, C1)), "")

另一种方法是使用COUNTBLANK函数的方式几乎相同。返回空范围内的单元格数量的计数:

类似的变化是使用ISBLANK函数(如果单元格为空,则返回TRUE)和AND函数:

=IF(A1=1, IF(COUNTBLANK(B1:C1)=2, "", IF(B1>C1, B1, C1)), "")

您也可以让Excel将B1和C1视为包含文本来进行评估,如下所示:

=IF(A1=1, IF(AND(ISBLANK(B1), ISBLANK(C1)), "", IF(B1>C1, B1, C1)), "")

如果B1或C1包含单个空格,此公式将无法正常工作,因此您可能需要在混合中添加TRIM函数:

=IF(A1=1, IF(B1&C1="", "", IF(B1>C1, B1, C1)), "")

在到目前为止讨论的任何公式中,您可能还希望通过MAX函数更改返回B1或C1的IF语句,方法是:

=IF(A1=1, IF(TRIM(B1&C1)="", "", IF(B1>C1, B1, C1)), "")

但是,如果您决定这样做,则需要注意以下几点:MAX函数认为所有文本值都等于0。因此,如果单元格B1包含“ abc”,而单元格C1包含1,则使用大于比较运算符(> )认为“ abc”大于1,但MAX认为“ 1”大于“ abc”。

=IF(A1=1, IF(TRIM(B1&C1)="", "", MAX(B1:C1)), "")

您还可以使用另一种方法来使用Graham的原始公式(该公式不检查两个空白单元格),而只需格式化包含该公式的单元格即可。只需创建以下自定义格式:

注意格式末尾的两个分号。它们告诉Excel如果单元格中的值为负值或零值,则不显示任何内容。使用这种格式,您将永远不会看到日期1/0/1900。该单元格将显示为空白。

m/d/yyyy;;

当然,您可以修改Excel,以使其在工作表中隐藏所有零值(如其他_ExcelTips_所述),但如果您需要显示其他公式的零结果,则这样做可能不符合您的目的。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(10386)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。