【发布时间】:2022-10-18 03:10:54
【问题描述】:
回到this 问题,我希望在数组中创建一个运行总计,但在数组的每一行中重新开始
| 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)
)
)
)
但是,我现在希望更一般地使用 Let 语句来写这个:
=LET(
range, Sheet1!A1:D2,
MAKEARRAY(
rows(range),
Columns(range),
LAMBDA(r, c,
SUM(INDEX(range, r, 1) : INDEX(range, r, c))
)
)
)
但它导致
这个非常相似的公式可以正常工作(它不应该解决原始问题,而只是用于测试是否可以在 Let 语句中将范围传递给 lambda):
=LET(
range, Sheet1!A1:D2,
SCAN(0, range, LAMBDA(a, c, a + c + INDEX(range, 1, 1)))
)
相同的代码还可以将范围作为参数传递给 Google 表格中的命名函数。
定义范围作为命名范围也有效。
像这样使用封闭的 Lambda 而不是 Let 有同样的问题:
=LAMBDA(range,
MAKEARRAY(
ROWS(range),
COLUMNS(range),
LAMBDA(r, c,
SUM(INDEX(range, r, 1) : INDEX(range, r, c))
)
)
)
Makearray 是否存在特定问题,或者是否有其他原因导致失败?
【问题讨论】:
-
我没有收到
=LET(range,A1:D2,MAKEARRAY(ROWS(range),COLUMNS(range),LAMBDA(r,c,SUM(INDEX(A1:D2,r,1):INDEX(A1:D2,r,c)))))i.stack.imgur.com/mwqwZ.jpg 的错误,您是否有一个命名范围等于行或列?我注意到您的公式显示rows(range)和Columns(range)没有大写,如预期的那样。 -
感谢@p.b,您在 lambda 中明确地重复了原始范围 a1:d2 而不是用 'range' 替换它,这样就可以解释差异。
-
我明白了,将它们替换为
range时确实会出错。 -
Using an enclosing Lambda instead of Let has the same issue.是吗?至少在 Google 表格中,LAMDA(没有LET) 参数由reference传递,而不是由value传递。所以,INDEX():INDEX()应该与LAMBDA一起使用 -
有趣的。我没有非常彻底地测试,所以会回到它。
标签: excel lambda excel-formula range let