为什么 IF/AND 语句中的条件被忽略

为什么 IF/AND 语句中的条件被忽略

我有以下公式。

=TRIM(
IFERROR(IF(AND($T9-TODAY()>=Key!$N$14,$T9-TODAY()<=Key!$M$14,$AA9<>"Complete",$G9<>"New Phase",$T9<>""),Key!$L$11,""),"Error")
)

我注意到“错误”部分IFERROR正在运行。因此,在检查了我的公式后,我非常确定原因是 T 列有时为空。因此,我进行了以下检查$T9<>""。但是,自从添加此检查后,“错误”仍然显示。

我添加的条件不应该导致条件的“FALSE”部分运行吗?它只是“”。

有人有任何见解吗?

在此处输入图片描述

在此处输入图片描述

答案1

您的公式没有构造失败,因此问题不是由该原因引起的。正如所写,它在逻辑上是有效的,因此无法生成一定是由于使用函数等或它们使用的值造成的。

所谓“使用函数...被应用”是指有时由于中间步骤人们可能没有想到,因此形成的使用会导致问题。例如,使用一个假的例子,“假”是因为它实际上不会引起问题(但没有真正的例子浮现在脑海中),假设问题在于TODAY()从一个值中减去,然后将其与其他值进行比较。例如:

=$T9 - TODAY() <= Key!$M$14

假设在计算此公式时,如果左半部分产生了负值,Excel 就会出错。(事实并非如此,因为 Excel 在处理时不考虑任何“类型”,因此它不期望日期结果,因此如果结果为负值,它也不会出错。但假设。)因此,Excel 会在计算公式的第一步中得到该负数,然后立即出错,而不是继续下去。它会将该错误带到每个后续计算中,因此其中的最终结果IFERROR()将是一个错误并为您提供该结果。

(再次强调,这是假装的。但作为如何快速克服这个问题的一个例子,你可能只是简单地将代数移动TODAY()到右侧,在那里它可能会添加到一个正值,所以在评估时它永远不会给出一个负的中间结果,所以永远不会触发错误。一旦评估,右侧将失去日期方面,只是一个数字,所有有趣的事情都会结束。所以通常可以找到简单的修复方法。)

正如我所说,这不是公式中任何组成部分的问题。所以现在你只剩下唯一真正的可能性: some component (cell) used in one of theAND() components contains an error

举例来说,无论您是否真的想要,Key!$M$9或者Key!$M$14是否T14考虑T9此类事情,都是如此。(除非以间接的方式:如果公式中有一个错误选择的成员,比如T9需要T14ANDT9恰好有错误而T14没有。)

因此,选择一种能够增强公式的用法,IFERROR()而不是成功求值,然后查看其中引用的每个单元格。一种好的、快速的方法是复制其中一个单元格中的公式Error(按 F2,突出显示所有内容并复制,然后转到某个空白处,这样您就可以在不损坏任何内容的情况下工作,然后按 F2 并粘贴 - 公式将具有与您从哪里获得它完全相同的引用)。然后,在公式下方的单元格中,输入=和每个单元格引用。所以:

=T9
=Key!$n$14

等等。现在,可以说一切都清楚了。如果其中一个组件显示 Excel 错误(例如单元格除以 0 得到结果),则说明存在错误。幸运的话,只有一个错误。

这在构建电子表格时经常会遇到问题,因为一个人做了一个测试更改,然后意识到需要做另一个又一个更改来进行测试,如此反复,产生了几个工作分支,但找不到回到良好起点的路径来进行所需的几个不同更改(因此,人们不是合并分支,而是以奇怪的方式将几个或更多分支挤在一起),这通常会导致使用的单元格地址出现真正的不匹配,例如 T9 和 Key!$M$14 看似不匹配的地址。但正如表面上的不匹配可能是完美匹配一样,这条路径可能不会导致它们。这种情况经常发生。

但是,我认为,最普遍的问题是先行公式导致错误,因此在依赖公式中调用它们的单元格会导致错误结果。发生这种情况的原因有很多,但由于人们通常认为公式的问题是构造问题,因此人们很少回头查看实际调用的单元格。尤其是当第一次使用效果很好并且只有一些“复制并粘贴”的公式导致错误时。

因此,无论您怎么做,您都必须选择其中一个故障结果并查看所针对的每个组件单元,无论您是否“知道”其中一个或多个“根本无法”推动错误。

我忘了提的一件事是,我设置了公式,包括工作表名称、工作表等等,它运行得非常完美。直到我在引用的单元格中创建了一个错误条件。因此,按照构造工作,并为您的 TRUE 和 FALSE 分支提供正确的结果经过IF()了测试 — 在引用的单元格中没有错误的精心设置下。但是,在其中任何一个单元格中输入错误,它都会退回到结果IFERROR()

答案2

我假设 A18 中的公式指的是 T18(显示的公式使用 T9)。您可能希望将 IF(T9<>"" 更改为 IF(ISBLANK(T9)。<>"" 仅在其中有空格时才返回 TRUE。下面的屏幕截图显示了类似的结果,其中包含公式详细信息和引用的单元格内容

在此处输入图片描述

希望这会有所帮助。

相关内容