首页 > 解决方案 > 我如何简化这个 IF 公式?如果可能的话

问题描述

我有这个公式:

=IF(C7="","",IF(C6>C5,IF(C7<=C5,0,(C7-C5)/(C6-C5)),IF(C6<C5,IF(C7>=C5,0,ABS(C7-C5)/(C5-C6)))))

引用这些单元格:

在此处输入图像描述

公式对普通人来说有点混乱,但它让我得到了我想要的东西。有没有办法简化这个?

标签: excelif-statement

解决方案


哇,这很有趣。

您的第一个IF语句中有一个隐含的 0,我认为应该是"". 如果最小成就等于最大成就,那将使最终未定义。

如果我是正确的,您可以简化为=IFERROR(MAX((C7-C5)/(C6-C5),0),""). 要复制您的公式,您可以简化为IF(C5<>"",IFERROR(MAX((C7-C5)/(C6-C5),0),0),"").

如果你有 Office 365,我建议你使用LET函数来进一步描述你的代码。该LET函数允许您在公式中定义局部变量。您还可以添加空格以更好地组织公式。

这是使用 let 函数的公式。它更长,但更容易说出发生了什么:

=LET(
    Achiev0, C5,
    Achiev100, C6,
    Actual, C7,

    IF(
        Actual="",
        "",
        IF(Achiev100>Achiev0,
            IF(Actual<=Achiev0,
                0,
                (Actual-Achiev0)/(Achiev100-Achiev0)),
            IF(Achiev100<Achiev0,
                IF(Actual>=Achiev0,
                    0,
                    ABS(Actual-Achiev0)/(Achiev0-Achiev100)),
                0
    )))
)

如果你定义更多的变量,你可以得到这样的东西:

=LET(
    Achiev0, C5,
    Achiev100, C6,
    Actual, C7,

    NoValue, "",
    OutOfBounds, 0,
    Final, ABS((Actual-Achiev0)/(Achiev100-Achiev0)),

    IF(Actual = "", NoValue,
        IF(AND(Achiev0 <= Achiev100, Actual <= Achiev0), OutOfBounds,
            IF(AND(Achiev0 >= Achiev100, Achiev0 <= Actual), OutOfBounds,
                IFERROR(Final,OutOfBounds)
    )))
)

我上面的简化如下所示:

=LET(
    Achiev0, C5,
    Achiev100, C6,
    Actual, C7,

    Final, (Actual-Achiev0)/(Achiev100-Achiev0),
    IFERROR(MAX(Final,0),"")
)

推荐阅读