寻找缩短 IF 公式的解决方案

Sol*_*oos 9 worksheet-function microsoft-excel

我有一个具有以下结构的长公式:

=IF(!X!<>0,!X!+A1,"")
Run Code Online (Sandbox Code Playgroud)

哪里!X!是一个很长的公式。

有什么解决方案可以避免重复 !X! 两次?我需要它有两个原因:

  1. 使公式对工作表的用户可读
  2. 减少处理时间

我很感激任何帮助。

谢谢,迪奥

AFH*_*AFH 23

显而易见的答案是将公式放在远离主工作表的工作单元格中。例如,如果您使用H1,请将其设置为:

=!X!
Run Code Online (Sandbox Code Playgroud)

然后你的公式变成:

=IF(H1<>0,H1+A1,"")
Run Code Online (Sandbox Code Playgroud)

这是人们在任何其他编程语言中所做的典型工作。

  • @Dio - 好的。您接受的答案相当聪明,但请注意,由于四舍五入,您可能会失去准确性(`1/(1/x)` 并不总是与 `x` 完全相同),尤其是在处理整数时数据。它也不适用于更普遍的情况(例如检查小于零)。(评论与@LưuVĩnhPhúc 在接受的答案中交叉。) (4认同)
  • @Dio 如果它不应该被看到,那么只需隐藏该列。您甚至可以命名列/范围以使其更易于阅读 (2认同)
  • 看看长公式会很有帮助。除了工作单元格之外,还可以在包含公式的工作表中定义名称 (2认同)

Gar*_*ent 12

另一种方法是使用双重反转

=IFERROR(1/(1/really_long_formula)+A1,"")
Run Code Online (Sandbox Code Playgroud)

如果real_long_formula 的计算结果为0,您将得到除以零并IFERROR()捕获它!

请注意,处理此要求的常用方法(也是最佳方法)是使用辅助单元格。

  • 这可能会因浮点除法而导致精度丢失 (7认同)
  • @LưuVĩnhPhúc **你完全正确!** *AFH* 方法是最好的方法! (3认同)
  • **注意:** 确实 * 可能* 有一些精度损失,但这很少成为相关问题。我在 Excel 中多次用 100,000 个随机数测试了 `1/1/x`,只有 1.4% 的时间出现舍入错误。我发现的最大相对误差是 1.6e-16,实际上是零。*此外,有趣的是,整数从未显示舍入错误*(测试了从 0 到 1e14 的多个范围)。因此,从纯度/清洁度的角度来看,这个答案可能会令人不悦,但从实际计算的角度来看则不然。 (3认同)