当公式使用的数据发生改变时,数组公式的结果会消失

当公式使用的数据发生改变时,数组公式的结果会消失

我正在使用数组公式根据会员期限和会员总价值计算现金流。这是我的公式:

{=IFERROR(IF(MOD(DATEDIF($N8,AB$7,"m"),$S8)=0,IFERROR(HLOOKUP(MIN($Z$7,INT(DATEDIF($N8,AB$7+1,"m")/$P8)),$U$7:$Z$111,_xlfn.SINGLE(ROW($A8))-ROW($A$6),FALSE)/(12/$S8),0),0),0)}

我在 J 列中所做的任何更改都更新了我的会员总数(这是一个硬编码值),这会导致整个电子表格中的所有结果消失,并且我得到的单元格中间只有一个破折号。但公式仍然存在。

我通过 Office 365 使用 Excel。此电子表格保存在 Dropbox 中,其他有权访问该电子表格的用户没有遇到此问题。有人能帮我找出为什么所有结果都消失了以及如何防止这种情况发生吗?

答案1

第一个值得关注的点,也是需要验证的一点是,单元格中显示的破折号通常是数字格式,显示破折号而不是单元格的实际值 0。通过 或Right-Click按提供的格式化功能可以快速轻松地检查这一点Ctrl-1

人们期望它是如此,所以继续下去,这意味着你的公式的计算结果为 0。问题是“为什么?”

您的公式有两点值得注意。一是J公式中没有任何符号。甚至拼写也没有。因此,通常情况下,您可能不得不深入研究 J 列中的某些内容如何影响您的公式,找出公式中的一个或多个单元格或函数依赖于 J 列中的某些内容。您比我们更了解您的公式,因为我们给出的信息非常少,这对您来说可能很明显。或者这可能需要大量工作。无论如何……必须完成。

但是,在执行此操作之前,由于您显然得到了 0 的结果,您可能会想知道为什么……这是另一件引人注目的事情:IFERROR()完成的包装:如果出现错误,则将两个IFERROR()设置为返回 0。 本身IF()提供了返回 0 的第三个来源。因此,快速测试其中哪一个是“罪魁祸首”可以让您的任务更容易。

编辑公式三次:首先IF()我想是。它的“0”结果是公式末尾的三个 0 中的第一个。将其更改为,哦,2,然后保存编辑。结果是否立即从破折号变为其他内容,也许是 2?然后包含IF()J 列值与公式交互的位置。如果没有,请按Ctrl-Z恢复,然后将中间的 0 更改为 2。有新结果吗?如果是,则按HLOOKUP()" portion is the source of difficulty from column J. Undo again withCtrl-Z` 并更改最后的 0。如果前两个没有变化,那么这就是来源,但无论如何都要更改它,看看它是否确实从破折号变为其他内容。

您的公式看起来写得很好,而且您描述的更改似乎永远不会导致问题,除非发生一些非常奇怪的事情,但这似乎不太可能发生,所以我怀疑存在某种逻辑错误。我的意思是某些对 Excel 来说毫无意义的事情。如果发生除法,除以 0 总是一个值得关注的问题,所以这也是列表中的首要问题。我看到的唯一除法是在函数的一个值中MIN(),很难想象对您的会员资格进行轻微更改会使其变为 0,从而导致除以零的错误。回到“对 Excel 毫无意义”的想法。

您的INT()函数...如果我们刚刚讨论的除法结果为 <1 的值(好吧,-1 < 值 < 1,但似乎所有值都是正数,所以 <1),则INT()结果将返回 0。通常没有问题,但您将该结果提供给查找函数,告诉它在 U7:Z7 中的值中查找“0”。如果该范围内没有 0,则不会匹配,并且由于那里的选项为“FALSE”,查找将返回错误,因此IFERROR()包装它的内部将返回 0,从而显示破折号。

其他可能出现问题的区域包括查找返回的行。但这种情况极不可能发生,因为它永远不会起作用,但在更改 J 列之前它确实会起作用。同样,MOD()开始时应该总是起作用或永远不会起作用,因为 J 列的变化似乎不太可能使 S8 为 0,唯一可能的情况是成员资格发生变化后可能会出现故障。但是,我们不知道 S8 是什么,并且 S8 确实用于后面的除法(公式的最末端),如果达到 0,它会导致相同的错误。不过,这似乎不太可能。

我敢打赌,根据稀疏的信息,你会追踪到部分INT()。那里的计算不应该看到分子从所述变化增加,因为月份不应该改变,但它可以看到分母 (P8) 的增加可能会导致结果低于 1,从而为查找提供零。(我一直提到那里的 0,但实际上,担心的只是让它超出 U7:Z7 中六个值的范围:如果它们是“4,5,6,7,8,9”,而你得到 3,那就是相同的错误结果。)

如果这引起了共鸣,你只需要验证它并解决问题。如果它似乎不符合你所了解的事物结构,那么我们不知道这种结构,这并不奇怪。但即便如此,上面的内容应该能让你对如何解决这类问题有所思考。

如果以上方法均未缩短工作时间,请从另一端(通常更难的一端)开始,然后向前推进:在 J 列中进行更改最先受影响的地方是什么?这会影响什么?继续进行,直到下一个受影响的地方是您的公式。看看其中是否有任何方法会破坏您的公式结果。必须这样做,否则沿途的结果可能会返回错误,从而将错误传递到您的公式中。(同样,我们实际上不知道具体细节,因此很难想象能给您比一般情况更好的结果。)

因此,关键是破折号几乎肯定意味着返回 0,这又意味着IFERROR()或 中的一个IF()正在返回 0。这是一个普遍的观察,但无论如何都是事实。很难看出您IF()对所描述的更改这样做,因此IFERROR()也很难看出外部是罪魁祸首。因此内部似乎最有可能。会员人数的增加似乎不太可能降低DATEDIF()那里的价值,因此将其推到与 U7:Z7 匹配所需的值范围之外似乎是最有可能的,因为 P8 从 J 列增加而变得更大。坦率地说,此处查找的明显用途似乎……不寻常……但它在更改前有效,因此人们认为概念本身没问题。在公式之外,您应该寻找以某种方式导致使用该信息的任何单元格中出现错误结果的增加,然后将其输入到此公式中。(我承认,这似乎不太像“总结”,但这是由于缺乏细节可指出。)

但请记住,这都是学习经历。那些杀不死你的事会让你更强大。等等。

答案2

由于您的公式包含以下内容:

_xlfn.SINGLE()

我假设您使用的 Excel 版本不支持动态数组,也不支持隐式交集运算符@

正如所描述的这里

如果您在动态数组 Excel 中创作或编辑包含 @ 运算符的公式,它可能会在预动态数组 Excel 中显示为 _xlfn.SINGLE()。

此外:

当您提交混合公式时会发生这种情况。混合公式是一种依赖于数组计算和隐式交集的公式,前动态数组 Excel 不支持此功能。前动态数组仅支持始终执行 i) 隐式交集或 ii) 数组计算的公式。

这意味着您需要调试公式以确定为什么它被视为“混合”公式。

如果您的帖子中没有关于您的数据的更多详细信息,那么在这里很难做到这一点。

相关内容