我正在使用以下 Excel 公式,但收到错误“您为该函数输入了太多参数”。还有其他方法可以让该函数正常工作吗?
IF(N11="MS",IF(M11<3.4,"",IF(AND(3.4<=M11,M11<=5.4),0.5716*M11+2.498,0.8126*M11+1.1723)),IF(N11="mb",IF(AND(3.9<=M11,M11<=6.8),1.0319*M11+0.0223,"")),IF(N11="ML",IF(AND(3.3<=M11,M11<=6.6),0.8095*M11+1.3003,"")))
答案1
在 Excel 中,最多可以有 7 个嵌套 IF 语句,如果您的 Excel 版本支持(Excel 365 或 2019),则可以使用 IFS 而不是 IF 来获得更多条件。
答案2
正如Naz
所说,您可以嵌套得太远。但这里的问题不同。您的公式可以添加一些空格等,如下所示:
=IF(N11="MS",
IF(M11<3.4, "", IF( AND(3.4<=M11,M11<=5.4), 0.5716*M11+2.498, 0.8126*M11+1.1723)),
IF(N11="mb",
IF( AND(3.9<=M11,M11<=6.8), 1.0319*M11+0.0223, "")),
IF(N11="ML",
IF( AND(3.3<=M11,M11<=6.6), 0.8095*M11+1.3003, ""))
)
第一行表示“如果这个特定的事情为真,则执行第二行,否则执行第三行”。第二行是另一行,IF()
它是完整的:它表示如果这个事情为真,则执行这个事情,否则执行那个事情。但是,如果将括号配对,您会发现它与其他所有事情完全分开……它是一个整体。但这没关系,因为第一行必须为 TRUE 提供一些东西,为 FALSE 提供一些东西。整个事情就是 TRUE 所发生的事情。一个美好而简单的世界,如果第一行是真的,那么只有一小组事情会发生,这就是全部。您可以有更多IF()
内容到达这一点,但很酷,您不需要,这很容易。
然后虚假路径开始了。这条路径不那么简单。它像第一行一样开始,说如果这是真的,那么……第四行。一个不错的平行结构,一定都很好,是吗?所以像第二行中的第一个 true 一样,它呈现了三件事:询问某事是真还是假,如果是真,则有一个结果,如果是假,则有一个结果。仍然没有问题……但是下一个字符毁了这一切。第四行,)
在结束逗号之前的最后一行:它是多余的。您IF()
正在查看的来自第三行测试的 true 分支以)
BEFORE IT 结束。
因此,这个匹配回之前的匹配,最后一个不匹配的匹配回之前的匹配,N11="mb"
这意味着链)
的结束IF()
。第一行是第一个测试。第二行是真分支。现在,第三行和第四行有一个完整的、结束的假分支。因此,它IF()
有它的所有三个部分:测试、真结果、假结果。
此后的所有内容都是额外的。第五行和第六行都是额外的。所有额外内容都从这里开始,并在公式的最后一个部分之前结束)
。对于只能处理三个部分的函数来说,这是第四部分。
毫无帮助的是,Excel 将光标放在导致失败的材料的最末端,而不是最开始的地方。由于这几乎是所有事情的最后,你会觉得失败一定涉及到了几乎所有事情。但事实并非如此。
顺便说一下,嵌套限制是针对 CHAIN 的,不断循环。因此,为了更清楚起见,它是这样的:
=IF(IF(IF(IF(IF(IF(IF(IF(...
这就导致了问题。问题不在于仅仅拥有三四五个分支,然后回到“顶层”层,以及拥有三四五个分支,然后回到“顶层”层,等等,如果你加上前四个,那么你已经有超过七个嵌套了,第二个五个……不。它们必须嵌套在一起,而不是并排嵌套。问题在于一个链有多长,而不是总共有多少个嵌套层。想想那些俄罗斯娃娃,而不是沃尔玛的娃娃过道。
因此,当您取出它时)
,您的错误就消失了。
不过,您可以使用其他方法。这个IFS()
建议非常好,因为它很容易做到:在电子表格的空白处设置(哎呀,为此创建一个新选项卡,然后将其删除),您需要成对的“测试 - 结果”,并且必须将它们按正确的顺序排列,就像您计划一个测试时一样,因此使用 A 列来编写测试,使用 B 列来编写结果,并执行您需要的所有测试结果对。您可以轻松地将它们上下移动,以使它们按正确的顺序工作。一旦有了这些,在 C 列中编写一个简单的连接公式,或者 concatenate 或 concat 或 textjoin,无论您喜欢什么或您的 Excel 版本有什么,将该行的 A 列和 B 列放在一起,中间用逗号隔开。然后编写一个连接(textjoining 在这里会非常有效,尽管 concating 也会很糟糕),将所有这些放在一个长字符串中。连接以 开始"IFS(
并以 结束)
,您就有了完整的公式,或者至少是其中的这一部分。复制,粘贴为值,然后按 F2 复制整个字符串。转到正确的单元格(这样您在测试结果对中输入的单元格引用才有效)或任何单元格(计划在执行此操作后编辑所有这些引用)并将其粘贴。耶。
这IFS()
件事引出了最后一个想法,这是这个公式所独有的,但人们总是这样做,却被它搞糊涂了:每个都IFS()
应该以世界上最后一种可能性结束,这样所有可能的结果都得到处理,或者应该以这样的一对结束: TRUE,result
这样,如果你检查的一切都失败了,公式仍然有一个结果。它可能像下面这样,也可能说些别的话。但它指出,所有这些都失败了,而你没有提供的东西就是这种情况。然后你就会弄清楚这个事实有多重要,或者多不重要。
就您的公式而言,这种情况会发生。您输入的最后内容仍然可能不合适,然后您就筋疲力尽了。您无法再进行测试,甚至没有收到错误消息。您期望的最好结果是单元格最终得到的结果FALSE
。例如,想象一下,如果 N11 中什么都没有。或者像“horse”这样的东西与您寻找的任何东西都不匹配。您不处理这个问题,所以这是一个风险。也许您计划好了,但如果没有,这会对您工作的完整性和有效性构成风险。
此外,您可以收紧测试的呈现方式。一千行不是问题,这就是电子表格所做的全部工作。但是,如果您有 20,000 行,Excel 需要加倍努力,并且另外九列都带有 Excel 必须计算的公式,那么……可能会有点停滞。下面的代码将执行您要执行的操作,但编写得更仔细,以利用测试提供的一些效率:
=IF(N11="MS", IF( M11<3.4, "", IF(M11>5.4, 0.8126*M11+1.1723, 0.5716*M11+2.498) ),
IF(N11="mb", IF( OR(M11<3.9, M11>6.8), "", 1.0319*M11+0.0223),
IF(N11="ML", IF( OR(M11<3.3, M11>6.6), "", 0.8095*M11+1.3003), "N11 = Something Else")))
在更紧凑、更高效的书写公式中,)
如果出现这种额外的错误,更容易发现,甚至不太可能发生。如果你像我在这里做的那样打破这些线条,你就会看到其中的规律,而我们人类正是专注于规律!在这里,请自己帮助自己。Alt-Enter
如果你愿意,你可以随时去掉多余的空白和末尾的 '。Excel 本身提供的混乱对任何人都没有帮助!帮助你自己。就像在戏剧中一样,“对自己诚实”……爸爸的意思是“你最好关心自己,因为没有人会关心你”,而“没有人”他指的是 Excel。Help YOU help YOURSELF.