如何在 Excel 中将 SUM 函数与(新)动态数组一起使用
How to use SUM function with (new) dynamic arrays in Excel
假设 3 列(A、B、C)是动态数组,我想创建一个 fourth/final 动态数组公式,它是 D 列中每一行的这 3 列的总和。为清楚起见,我正在寻找最后一列中每一行的逐行总和。
这将起作用:
=A2#+B2#+C2#
如何使用 SUM 函数完成相同的操作?我问的原因是这更容易用于更大范围的数据。
下面给个#REF!错误:
=SUM(A2:C2#)
新编辑:
通过添加 BYROW 和 LAMBDA,我们可以比我下面的原始答案更容易做到这一点:
=BYROW(A1#:C1#,LAMBDA(x,SUM(x)))
BYROW 将每一行传递到 LAMBDA 中,LAMBDA 迭代地执行 SUM 和 returns 数组:
原答案
问题是 SUM、MAX、MIN 都允许数组并在整个数组上做整体。所以我们需要使用一些使用数组并溢出单个结果的东西。这就是 MMULT 的目的。:
=MMULT(A2#:C2#,TRANSPOSE(COLUMN(A2:C2)^0))
刚刚用动态数组实现了序列:
=MMULT(A2#:C2#,SEQUENCE(COLUMNS(A2:C2),,1,0))
绝对的传奇。我一直在努力解决这个问题。太感谢了。我以前从未使用过 MMULT,只有 SUMPRODUCT 用于类似的问题。我的问题是动态总结溢出中的最后几列 table 并且我能够调整您的解决方案。
就上述问题而言,如果三个溢出列是一个溢出 table,行和列在一个溢出范围内,则它将是:
=MMULT(A2#,SEQUENCE(ROWS(A2#)),SEQUENCE(COLUMNS(A2#)),,1,0))
尝试计算每列的总和(假设 A1# 是源数据的动态范围):
=SUBTOTAL(9,OFFSET(A1#,0,SEQUENCE(1,COLUMNS(A1#))-1,ROWS(A1#),1))
只需更改 SUBTOTAL
函数的第一个参数即可使用任何可用的聚合函数(最小值、最大值、平均值等)。通过一些调整,这可以用于行总计。
当我尝试上述 Scott Craner 的公式时,我收到一个 VALUE# 错误,这可能与我在不同动态长度的数据列上测试它有关。
即使表达式 A2#:C2# returns 是一个宽度为 3 列且高度为三列中行数最多的矩阵(为任何空白单元格填充零),MMULT 没有' 似乎喜欢将该表达式和结果矩阵作为第一个参数。但是我发现我可以按如下方式修改它以使其工作:
=MMULT((A2#:C2#*1),序列(列(A2:C2),0))
假设 3 列(A、B、C)是动态数组,我想创建一个 fourth/final 动态数组公式,它是 D 列中每一行的这 3 列的总和。为清楚起见,我正在寻找最后一列中每一行的逐行总和。
这将起作用:
=A2#+B2#+C2#
如何使用 SUM 函数完成相同的操作?我问的原因是这更容易用于更大范围的数据。
下面给个#REF!错误:
=SUM(A2:C2#)
新编辑:
通过添加 BYROW 和 LAMBDA,我们可以比我下面的原始答案更容易做到这一点:
=BYROW(A1#:C1#,LAMBDA(x,SUM(x)))
BYROW 将每一行传递到 LAMBDA 中,LAMBDA 迭代地执行 SUM 和 returns 数组:
原答案
问题是 SUM、MAX、MIN 都允许数组并在整个数组上做整体。所以我们需要使用一些使用数组并溢出单个结果的东西。这就是 MMULT 的目的。:
=MMULT(A2#:C2#,TRANSPOSE(COLUMN(A2:C2)^0))
刚刚用动态数组实现了序列:
=MMULT(A2#:C2#,SEQUENCE(COLUMNS(A2:C2),,1,0))
绝对的传奇。我一直在努力解决这个问题。太感谢了。我以前从未使用过 MMULT,只有 SUMPRODUCT 用于类似的问题。我的问题是动态总结溢出中的最后几列 table 并且我能够调整您的解决方案。
就上述问题而言,如果三个溢出列是一个溢出 table,行和列在一个溢出范围内,则它将是:
=MMULT(A2#,SEQUENCE(ROWS(A2#)),SEQUENCE(COLUMNS(A2#)),,1,0))
尝试计算每列的总和(假设 A1# 是源数据的动态范围):
=SUBTOTAL(9,OFFSET(A1#,0,SEQUENCE(1,COLUMNS(A1#))-1,ROWS(A1#),1))
只需更改 SUBTOTAL
函数的第一个参数即可使用任何可用的聚合函数(最小值、最大值、平均值等)。通过一些调整,这可以用于行总计。
当我尝试上述 Scott Craner 的公式时,我收到一个 VALUE# 错误,这可能与我在不同动态长度的数据列上测试它有关。
即使表达式 A2#:C2# returns 是一个宽度为 3 列且高度为三列中行数最多的矩阵(为任何空白单元格填充零),MMULT 没有' 似乎喜欢将该表达式和结果矩阵作为第一个参数。但是我发现我可以按如下方式修改它以使其工作:
=MMULT((A2#:C2#*1),序列(列(A2:C2),0))