回顾这个问题,我希望在数组中创建一个运行总计,但在数组的每一行中重新开始
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |
导致
| 1 | 3 | 6 | 10 |
| 5 | 11 | 18 | 26 |
一种解决方案是使用 Makearray,效果很好:
=MAKEARRAY(
2,
4,
LAMBDA(r, c,
SUM(
INDEX(sheet1!A1:D2, r, 1) : INDEX(sheet1!A1:D2, r, c)
)
)
)
Run Code Online (Sandbox Code Playgroud)
不过,我现在希望使用 Let 语句更普遍地编写此内容:
=LET(
range, Sheet1!A1:D2,
MAKEARRAY(
rows(range),
Columns(range),
LAMBDA(r, c,
SUM(INDEX(range, r, 1) : INDEX(range, r, c))
)
)
)
Run Code Online (Sandbox Code Playgroud)
但这会导致
这个非常相似的公式可以正常工作(它不应该解决原始问题,而只是测试是否可以将范围传递到 Let 语句内的 lambda):
=LET(
range, Sheet1!A1:D2,
SCAN(0, range, LAMBDA(a, c, a + c + INDEX(range, 1, 1)))
)
Run Code Online (Sandbox Code Playgroud)
相同的代码还可以将范围作为参数传递到 …
我想计算数组的累积/运行乘积。
然而,这两个问题下提供的解决方案并不完全是我想要的:
在这些问题下提供的两个解决方案中,该解决方案要么使用SCAN()我当前不可用的函数,要么使用OFFSET()仅允许range类型输入作为数组,而不是使用诸如 之类的函数生成的数组SEQUENCE()。
更明确地说:我想要计算其运行乘积的数组是=SEQUENCE(D11,1,1-D23,D24)其中 D11 是整数,D23 和 D24 是小数。
有没有人对此有公式内解决方案,或者我是否必须执行中间步骤以首先将序列“写入”范围,然后使用该OFFSET()函数?
编辑1:
上述函数的一个例子SEQUENCE()是{0.97, 0.96, 0.95, ..., 0.75}
编辑2:
OFFSET()如果有一种方法可以在不使用range类型数组作为输入的情况下使用它,我当然会对解决方案感到满意。
编辑3:
这是我试图在没有中间步骤的情况下实现的目标的数值示例。