在 Excel 中构建和管理复杂函数的建议

dww*_*n66 5 worksheet-function microsoft-excel

很多时候,我有一个公式将函数包装在函数内部的函数中,当某些新条件要求我将另一个函数包装在它周围时,我经常发现自己完全忘记了哪些括号去哪里,哪个函数适用到哪组参数,经常发现自己在修改语句后调试了半个小时,产生了意想不到的结果。

我一直在做的是将函数切成一列中的各个部分……每一行代表一个函数,当我对最终结果感到满意时,我将每一部分复制回它是前一个单元格中的相应位置,直到我完成了一个完整的,并且有希望工作的功能。

考虑:

         =IF((ISERROR((VLOOKUP(D2,$A$2:$A9,1,0))),(IF((D2=(VLOOKUP(D2,$A$2:$A$9,1,0))),0,D2)),E2)
0        =IF((ISERROR((VLOOKUP(D2,$A$2:$A9,1,0))),L17,E2)
TRUE     =ISERROR((VLOOKUP(D2,$A$2:$A9,1,0))
0        =IF((D2=L18),0,D2)
the      =VLOOKUP(D2,$A$2:$A$9,1,0)
Run Code Online (Sandbox Code Playgroud)

能够记录内联或具有类似于 VBA 弹出离子的东西来编辑公式会很棒,但由于存在,我很想知道还有哪些其他技术可以有效地构建复杂的功能你我发现很有帮助。想法?

Pet*_* L. 7

以下是我自己使用并建议员工在培训期间使用的一系列主要规则:

  1. 逐个(或逐个参数)构建复杂的公式(尤其是IFs),即,如果您有一列数据要根据特定条件进行解析,请从简单开始- 因此您确定条件按预期工作并返回每种类型的值的正确结果。此外,您可以通过自己的计算替换每个参数(见下文),但这样您就可以确定任何错误/错误结果不是由错误条件本身引起的,否则错误可能会干扰并且整体公式结果完全出乎意料且极难正确的。=IF(LEFT(A1,2)="AB",1,0)
  2. 每个参数都作为独立的公式在单独的列中准备,只有当它有效时,它才会合并到主公式(或在某些 Excel 圣经中称为超级公式)。
  3. 使用硬编码值作为中间解决方案。例如,如果您正在构建动态图表,范围通常使用OFFSETCOUNTA函数计算。所以,首先OFFSET使用纯数字构建你的,例如=OFFSET(A1,0,0,1,10),确保它返回你真正想要的,然后才开始构建计算部分,例如=OFFSET(A1,0,0,1,COUNTA(A:A)-1)
  4. 不要忽视公式计算器(Ribbon Formulas > Evaluate Formula):对于第一次看到它的人来说,它就像一束光)确实,拥有正确的语法并不意味着通常具有预期/正确的结果,这就像 Excel 调试器。
  5. 为了提高复杂公式的可读性,您可以使用换行符(可以通过公式栏中的ALT+添加ENTER)以及额外的空格使它们看起来像带有缩进的代码(所有这些在计算公式时都被忽略):

    =IF(
        LEFT(A1,2)="AB",
           MONTH(TODAY()),
           MONTH(B1)
       )
    
    Run Code Online (Sandbox Code Playgroud)

我希望这些建议能让生活更轻松)当然其他回答者会添加一些更有用的观点。


Pet*_*ert 5

通常,在我看来,跨列拆分较大的公式是最佳做法!

但是,如果您需要构建更大的公式,我建议您执行以下操作:

  1. 为常量使用命名范围 - 让你的公式更容易阅读 -=IF(A1>SalesThreshold,A1,0)=IF(D2>Assumptions!$B$239,D2,0)
  2. 使用 Excel 表格并用列名替换普通引用。这样,=IF(AND(YEAR(B2)=2013,C2="MyProduct",D2>SalesThreshold),D2,0)就变成=IF(AND(YEAR([Date])=2013,[Product]="MyProduct",[Sales]>SalesThreshold),[Sales],0)
  3. 如果公式仍然复杂,您可以使用该N()功能进行注释。该函数会将任何文本转换为 0,因此您可以使用这样的函数:
    =如果(
    N4>N20+N("快速检查"),
    N4^2+N("需要平方,因为我想不出更好的例子"),
    N4/2+N("不知道在这里评论什么!"))
    

希望有帮助!