【问题标题】:How do I avoid repeating long formulas in Excel when working with comparisons?进行比较时,如何避免在 Excel 中重复长公式?
【发布时间】:2017-02-01 14:08:46
【问题描述】:

我知道类似以下内容

=IF(ISERROR(LONG_FORMULA), 0, LONG_FORMULA)

可以替换为

=IFERROR(LONG_FORMULA, 0)

但是我正在寻找一个表达式以避免输入两次REALLY_LONG_FORMULA

=IF(REALLY_LONG_FORMULA < threshold, 0, REALLY_LONG_FORMULA)

我该怎么做?

【问题讨论】:

    标签: excel error-handling excel-formula boolean


    【解决方案1】:

    比较 Ln Exp 与 SQRT ^2:-

    因为 SQRT(0) 给出 0 而 ln(0) 给出 #NUM!

    所以你可以根据你是否想要相等来选择使用哪一个。

    理论上,这些也适用于负数。

    【讨论】:

    • 这是一个很好的观察。谢谢!
    • 谢谢!还用负阈值(见编辑)对其进行了测试,理论上应该可以工作,但在实践中,你会遇到带有舍入误差的卢布。这就是为什么我对这些功能有点怀疑的原因,因为你不能保证你总是会回到你最初想到的数字。
    【解决方案2】:

    我想出了以下几点:

    =IFERROR(EXP(LN(REALLY_LONG_FORMULA – threshold)) + threshold, 0)
    

    它的工作原理是利用负数的日志产生错误以及EXPLN 互为倒数。

    这样做的最大好处是,当您更改 REALLY_LONG_FORMULA 的一个副本中的某些内容时,它可以避免在电子表格中意外引入错误,而无需记住在您的 IF 语句中将相同的更改应用于 REALLY_LONG_FORMULA 的另一个副本.

    大于中的比较

    =IF(REALLY_LONG_FORMULA>=threshold,0,REALLY_LONG_FORMULA)
    

    可以替换为

    =IFERROR(threshold-EXP(LN(threshold-REALLY_LONG_FORMULA)),0)
    

    以下示例(@Jeeped 提供):

    对于严格的不等式比较,请使用@Tom Sharpe 指出的SQRT(_)^2

    【讨论】:

    • 我没有测试过你的数学,但它看起来是正确的;下次出现这种情况时,我会测试一下。
    • 我自己使用双重倒数和统一,以及其他各种(例如,排除负数,取平方根然后平方),视情况而定:excelxor.com/2014/09/25/…
    • 我考虑过使用 SQRT 和 ^2。当 REALLY-LONG-FORMULA=threshold 时,结果似乎略有不同?
    【解决方案3】:

    如果您要与 threshold 金额进行比较,我会考虑查看 ExcelJet 最近关于 Replacing Ugly IFs with MAX() or MIN().

    此外,MAX()MIN() 函数比使用鲜为人知的函数(如 EXP()LN())更直观。

    【讨论】:

    • 感谢您的评论。我会尽可能使用 MAX 和 MIN。但是(如果我错了,请纠正我),当函数不连续时,我认为 MAX 和 MIN 不起作用。例如 MAX(threshold, X) 将等于 X
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多