我正在寻找一个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的格式,这样我就不必担心在数据增长时会扩展它们。
答案 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;
}
我希望这有帮助吗?