excel - 我如何简化这个 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)))))
引用这些单元格:
公式对普通人来说有点混乱,但它让我得到了我想要的东西。有没有办法简化这个?
解决方案
哇,这很有趣。
您的第一个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),"")
)
推荐阅读
- javascript - 在javascript中使用split函数后如何推送变量?
- android - 找不到 react-native-fs 路径?
- python - 使用正则表达式提取日期和文件名
- powershell - 在 powershell $null 属性中过滤或查询
- angular - Angular 不会在 api 中发布数据
- c# - 在 Visual Studio 中针对多个配置运行单个测试
- javascript - 使用 lodash 和日期对数组对象进行排序
- python - 训练yolo自定义检测以及如何制作应用?
- c - 读取地址指向的数据
- ansible - var.results 的 Ansible 寄存器变量迭代问题