我正在使用Excel中的新动态(也称为溢出)公式。我需要一个动态数组,它是另一个动态数组的累加或运行总计。
假设我在A1:A8
中有以下动态数据:
12
20
14
13
12
13
26
11
在这个数组中找到差异是很琐碎的:
=OFFSET(A1#,1,0)-A1#
8
-6
-1
-1
1
13
-15
-11
但是如何使用新的动态公式获得运行总数?
12
32
46
59
71
84
110
121
我正在使用Excel中的新动态(也称为溢出)公式。我需要一个动态数组,它是另一个动态数组的累加或运行总计。
假设我在A1:A8
中有以下动态数据:
12
20
14
13
12
13
26
11
在这个数组中找到差异是很琐碎的:
=OFFSET(A1#,1,0)-A1#
8
-6
-1
-1
1
13
-15
-11
但是如何使用新的动态公式获得运行总数?
12
32
46
59
71
84
110
121
累积求和公式,使用 SCAN()
和 LAMBDA()
-- 动态Spill数组公式
• 单元格 B1
中使用的公式 --> 使用 SCAN()
和 LAMBDA()
方法 --> 适用于 MS365
=SCAN(0,A1:A8,LAMBDA(x,y,x+y))
• 单元格 C1
中使用的公式 --> 使用 VSTACK()
、SCAN()
和 LAMBDA()
的方法 --> 适用于 MS365 Office Insiders Beta 渠道。
=VSTACK(A1,SCAN(A1,A2:A8,LAMBDA(x,y,x+y)))
• 单元格 D1
中使用的公式 --> 使用 LET()
, SCAN()
和 LAMBDA()
的方法 --> 适用于 MS365
=LET(x,A1:A8,
sum,LAMBDA(z,y,z+y),
SCAN(0,x,sum))
使用MAP()
和LAMBDA()
• 在单元格B1
中使用的公式
=MAP(A1:A8,LAMBDA(x,SUM(A1:x)))
以下是使用矩阵乘法的另一种方法
=MMULT(TRANSPOSE((ROW(I3#) <= TRANSPOSE(ROW(I3#)))*I3#),SIGN(I3#))
新回答 2022年6月20日
要使用 A1
中的动态数组,请使用以下公式:
=MMULT(N(ROW(A1#)>=TRANSPOSE(ROW(A1#))),A1#)
如果A1
中的动态数组有多列,此公式将返回每列的累积总和,不像我更复杂的原始答案。
原始答案 2022年1月13日
通过使用 SIGN(I3#)
,chris neilsen
的解决方案会累加绝对值。为了适应负数,请在累积总和中将SIGN(I3#)
替换为 1*(I3#=I3#)
:
=MMULT(TRANSPOSE((ROW(I3#) <= TRANSPOSE(ROW(I3#)))*I3#),1*(I3#=I3#))
或者,可以使用以下公式生成一个动态数组来替换 1*(I3#=I3#)
:
SEQUENCE(ROWS(I3#),,,0)
(我没有足够的声望进行评论。)
MMULT((ROW(D2#)>=TRANSPOSE(ROW(D2#)))*1,D2#)
;通过将<=
改为>=
,你可以省去一个TRANSPOSE
。 - Lukas我曾经用过一种方法来实现它,但想知道是否有更简单/更高效的方法来实现...
=SUBTOTAL(9,OFFSET(A1#,0,0,SEQUENCE(COUNT(A1#))))
=SUBTOTAL(9,OFFSET(A1#,SEQUENCE(COUNTA(A1#),1,0),0,12))
你也可以使用以下方法:
=SUBTOTAL(9,INDIRECT(CELL("Address",A1)&":"&CELL("address",OFFSET(A1,SEQUENCE(NumberOfRows,0,0,1),0))))
=SUBTOTAL(9,INDIRECT(CELL("Address",A1)&":"&CELL("address",OFFSET(A1,B1#,0))))
如果您使用= SUBTOTAL(6,...),这也适用于累积乘积
我发现上面给出的答案对我不起作用。
我的答案似乎不适用于PRODUCT()和SUM()公式,仅适用于SUBTOTAL()。我猜测PRODUCT()和SUM()尚未更改为溢出/数组类型公式,但SUBTOTAL已经更改了。
LAMBDA()
对于 Excel 真的是一个改变游戏规则的函数。 - Mayukh Bhattacharya11/15/23
之前的更新是Biome
字体,而11/15/23
的更新是Daytona
。 - undefined