【发布时间】:2017-05-10 18:06:23
【问题描述】:
我遇到了一个看起来很常见的要求:包含先前行的数组公式计算。问题似乎是数组公式中的所有单元格都被一次评估,因此它认为存在循环依赖,并给出了错误。
我已经模拟了一个toy example on Google Spreadsheet,您应该能够看到并发表评论。 (我已禁止编辑访问以防止故意破坏。)
看起来像这样,其中所有内容都在行 2 中,项目符号 1、2、3、4 分别指的是 A、B、C、D 列:
- “更改” - 手动输入为空白
- '例如。兴趣' -
=ARRAYFORMULA(IF(ROW(B2:B)>2, OFFSET(D2:D, -1, 0) + A2:A,)) - “利率” - 手动输入为空白
- '平衡' -
=ARRAYFORMULA(IF(ROW(D2:D)=2, 0, B2:B*(1+C2:C)))
我们的想法是让利率复合(可能有可变利率)和每行加/减资本变化的选项,但是,单元格 B2 和 D2(点 2、4)错误 @ 987654331@,并在悬停时报告“循环依赖”。
我已经尝试了所有我能想到的:OFFSET、INDIRECT、D1:D(而不是2),甚至是一个辅助列,除了参考D(这只是导致了一个三列循环依赖)。
我怎样才能拥有'ex。兴趣”列引用数组公式中上一行的“余额”列而不会导致此错误?
类似的问题用SUMIF 在行上解决这个问题,条件是行小于数组公式中的“当前”行。 我看不出这在我的情况下可行,因为我需要将整个运行总和乘以每一步的利息。我尝试SUMIF(... "="&DATE(...) ...) 引用前一行;这可以在帮助列中打印抵消余额,但尝试使用它(通过下面的迭代计算)就像它是零一样。
在@JackBrown 的建议下,我启用了消除循环依赖错误的迭代计算,但是它仍然不起作用 - 第二个填充的行从上一行获得了 0 的值,尽管前一行有一个非-零值。好像它在早期迭代中获取了值,并且没有在更改时更新。
【问题讨论】:
-
投反对票的原因?
-
你试过了吗?文件>电子表格设置>计算>迭代计算=打开。希望有帮助!
-
@JackBrown 实际上,我说得太早了——这解决了循环依赖问题,但它似乎将
0作为前一行余额的值,即在它得到它的值之前,并没有'不更新。 -
我不完全确定您要计算什么?您可以创建具有预期值的新列吗?
-
@JackBrown '前。利息”应该是之前的“余额”+“零钱”。我添加了一列,通过下拉的“标准”公式显示预期值。
标签: excel google-sheets array-formulas