Google Spreadsheet ArrayFormula,其值取决于它上面的值

时间:2014-12-04 00:06:04

标签: google-sheets array-formulas

我正在寻找一个ArrayFormula问题的解决方案,其中我放入B列的值取决于它上面的B列的所有值。 (这不是一个真正的循环引用,我可以编写没有ArrayFormula的解决方案。)

这是我正在尝试做的简单版本。 A列中的单元格包含正值或负值。如果A中的值为正,则相同的值将被复制到B.但是,如果A为负,则复制的A的值将是A的最小值或者对于它上面的所有单元格的B的累积和

A     B
  1     1
  2     2
 -2    -2
  3     3
-10    -4

这是我手动复制的B2中的公式,即:

=if(A2>0,A2,max(-sum(B$1:B1),A2))

你可以将A视为要么将钱存入账户(+)或从账户中取钱( - )而B是对所发生的事情的回应,要么全部进入,要么你可以拉最大化。

如果有必要,我很高兴有额外的列进行中间计算,但我似乎无法想办法绕过伪圆参考,其中放入Bn的值取决于Bn-1。 / p>

理想情况下,我很乐意设置它,以便我在ArrayFormula中的范围是B2:B的格式,这样我就不必担心在数据增长时会扩展它们。

1 个答案:

答案 0 :(得分:1)

下面的代码应该为您提供一个自定义函数,其行为类似于arrayformula。您可以使用它引用整列。 Click here for an example sheet(单元格C2包含自定义公式)。

使用的代码是:

function CF(range) {
var out = [];
range.reduce(function (a, b) {
    return a.concat(b);
})
    .filter(function (d) {
        return d !== '';
    })
    .forEach(function (x) {
        out.push(x > 0 ? x : Math.max(x, -out.reduce(function (p, c) {
            return p + c;
        })))
    });
return out;
}

我希望这有帮助吗?