为什么使用此公式会出现 SPILL 错误?

为什么使用此公式会出现 SPILL 错误?

我有以下公式:

=IF(DIV_P="ALT",(TEXT(SUMIF(ALT,F3,QTY_R),"#,##0")&" CS / "&TEXT((SUMIF(ALT,F3,QTY_S)),"#,##0")&" P"),(TEXT(SUMIF(DIV_P,F3,QTY_R),"#,##0")&" CS / "&TEXT((SUMIF(DIV_P,F3,QTY_S)),"#,##0")&" P"))

由于某种原因,这个公式返回了 SPILL 错误。但是,我尝试将其分成两部分...

=TEXT((SUMIF(ALT,F3,QTY_R)),"#,##0")&" CS / "&TEXT((SUMIF(ALT,F3,QTY_S)),"#,##0")&" P"
...和...
=TEXT(SUMIF(DIV_P,F3,QTY_R),"#,##0")&" CS / "&TEXT((SUMIF(DIV_P,F3,QTY_S)),"#,##0")&" P"

...并且它们单独工作时都按预期运行。从 Microsoft 官方的 SPILL 错误支持资源来看,可能存在一些原因,例如内存不足、版本不兼容等。我目前使用的是公共计算机,因此完全有可能存在这样的原因。我只是想确保我没有遗漏公式语法中的其他内容。有什么想法吗?谢谢!

答案1

终于解决了这个问题,所以我只是来这里更新答案:

致谢 Reddit 用户:

  • @BronchitisCat 解释了为什么预期输出与实际输出不一致
  • @spinfuzer 提供工作公式
  • @PaulieThePolarBear 详细分享了其他相关见解。
  • 以及其他花时间为 Reddit 帖子做出贡献的人!

这里的主要问题是SUMIF()返回标量值(无关注:上述内容是正确的除了当它的第二个值不是单个单元格或值时)。IF()另一方面,该函数不是履行任何聚合类型;因此,当使用来IF()针对数组、范围、命名范围等评估某些逻辑时,输出将在每次迭代中将每个结果返回到新单元格中。

以下是产生预期结果的工作公式变体:

=TEXT(SUM((IF(DIV_P<>"ALT",DIV_P,ALT)=F3)*(QTY_R)), "#,##0 \C\S")& " / " &TEXT(SUM((IF(DIV_P<>"ALT",DIV_P,ALT)=F3)*(QTY_S)), "#,##0 \P")

不使用的变体IF()

=TEXT((SUMIF(ALT,F3,QTY_R))+SUMIF(DIV_P,F3,QTY_R),"#,##0")&" CS / "&TEXT((SUMIF(ALT,F3,QTY_S)+SUMIF(DIV_P,F3,QTY_S)),"#,##0")&" P"

相关内容