我想知道如何从Excel中的2D数组中获取行和列总计。这是一个相当常见的事情,但我无法通过搜索行和列总数找到答案,所以我认为值得将其作为一个问题发布。
假设我想在以下数组中找到最低列总数和最高行总数,该数组位于单元格A1:D3中: -
1 2 3 4
5 6 7 8
9 10 11 12
我最初的想法是
=min(A1:D3*(column(A1:D3)={1,2,3,4}))
但这种简单的方法不起作用。我记得读过你在某些情况下必须使用mmult并且已经看到使用它们的高级公式但是不太记得如何。我将尝试回答我自己的问题,但其他建议非常受欢迎。
答案 0 :(得分:1)
如您所述,您可以使用MMULT
执行此操作。以下内容适用于您的设置:
最小的列
=MIN(MMULT({1,1,1},A1:D3))
最大的一行:
=MAX(MMULT(A1:D3,{1;1;1;1}))
注意数组中有多少1个 - 对于行计算,每列需要1(即3),而对于列则反之亦然。还要注意数组的顺序 - 它不会以相反的方式工作
答案 1 :(得分:0)
是的,你必须要提供包含所需总数的列数组或行数组,然后使用可以使用MAX,MIN或任何其他聚合函数来获得所需的值。
列总计
=MIN(MMULT(TRANSPOSE(ROW(A1:D3))^0,A1:D3))
行总计
=MAX(MMULT(A1:D3,TRANSPOSE(COLUMN(A1:D3))^0))
所以我的想法是你创建一个单行数组{1,1,1}并将它乘以2D数组以最终得到一个数组{15,18,21,24}并从中获取最小值它
或者创建一个单列数组{1; 1; 1; 1}并将原始数组乘以最终得到一个数组{10; 26; 42},从中得到最大值。
请记住,mmult的工作方式类似于您在大学时可能学到的矩阵乘法,对于每个单元,它在第一个数组的相应行中的单元格中工作,然后在第二个数组中相应列的单元格中乘以每个对,将它们添加到总数中。因此,第一个数组中的列数必须始终等于第二个数组中的行数。
正如@Scott Craner提醒我的那样,必须用
输入的数组公式Ctrl Shift Enter