MMULT 函数是 Excel 中一个功能强大且有趣的函数,它返回两个数组的矩阵乘积。在本文中,我们将深入探讨 MMULT 函数在条件求和、累计求和、条件计数等方面的应用,这些技巧将帮助你更好地利用MMULT 函数,提高数据处理的效率和灵活性。
MMULT 函数返回两个数组的矩阵乘积其语法如下:MMULT(array1, array2)。
array1 和 array2 是要进行矩阵乘法运算的两个数组;
array1中的列数与 array2中的行数相同,且这两个数组必须是数字;
结果矩阵的行数与 array1 的行数相同,矩阵的列数与 array2 的列数相同。

一、求积
利用 MMULT 函数,我们可以便捷地计算综合成绩,实现成绩和权重的矩阵相乘:D2 = MMULT(B2:C6,G2:G3),是一个5 * 2的数组和2 * 1的数组,结果返回一个5 * 1的数组。

再如下图所示,用MMULT(ROW(1:9),COLUMN(A:I))乘积生成乘法表
二、条件求和
通过结合 MMULT 函数和逻辑运算,我们可以轻松实现对特定条件下求和操作,假设我们要需要计算值小于60的所有单元格之和,可以使用以下公式:G2=MMULT((B2:F6<60)*(B2:F6), ROW(1:5)^0)

(B2:F6<60) * (B2:F6):单元格区域内小于60的单元格,生成了一个5 * 5的数组;
ROW(1:5)^0 生成一个5 * 1的,由数字1组成的数组。
三、条件累加求和
MMULT 函数不仅能够进行条件求和,还能实现按条件累加求和,比如统计商品库存量,公式如下:C2=MMULT((ROW(1:9)>=COLUMN(A:I))*1,($A$2:$A$10=A2)*$B$2:$B$10)
输入公式后需要,使用Ctrl+Shift+Enter,然后往下填充公式;
(ROW(1:9)>=COLUMN(A:I))*1:生成一个 9 * 9的,由数字1和0组成的数组;($A$2:$A$10=A2)*$B$2:$B$10:返回单元格对应商品的出入口数组,商品A为{93;0;-65;0;0;0;0;94;0};MMULT()+Ctrl+Shift+Enter:返回数组1的第一行数据和数组2的乘积。
四、条件计数
利用 MMULT 函数,我们可以高效地统计数据中每个元素出现的次数,如下图所示,需统计每个名字出现的次数,可以使用以下公式:B2 = MMULT(($A$2:$A$9=TRANSPOSE($A$2:$A$9))*1,ROW($A$2:$A$9)^0)

$A$2:$A$9=TRANSPOSE($A$2:$A$9)是一个8 * 8的逻辑数组,乘以1转换成数字数组;ROW($A$2:$A$9)^0,生成一个8 * 1的,由数字1组成的数组。
五、一维表转二维表
有时候,我们需要把一维表转换成二维表以便更好地展示数据。通过 MMULT 函数可以帮助我们快速实现这一转换:F2 =MMULT((TRANSPOSE(A2:A10)=E2:E4) * 1,(B2:B10=F1:H1) * C2:C10)

TRANSPOSE(A2:A10)=E2:E4:生成1个3 * 9的逻辑数组,乘以1转换成数字数组;(B2:B10=F1:H1):生成1个9 * 3的逻辑数组,乘以 C2:C10转换为成绩的数字数组。
六、按指定次数重复数据
若需按照指定的次数重复数据,可以使用如下公式:D2=LOOKUP(ROW(A1),MMULT(N(ROW($1:$5)>COLUMN(A:D)),B$2:B$5)+1,A$2:A5)&""

N(ROW($1:$5)>COLUMN(A:D)):返回4 * 4的,由数字1和0组成的数组;MMULT(N(ROW($1:$5)>COLUMN(A:D)),B$2:B$5)+1:返回各姓名第一次出现的索引位置,即{1;2;4;7;11};LOOKUP(ROW(A1),{1;2;4;7;11},A$2:A5):查找等于或最接近且不大于row()函数的数值,返回A$2:A5中相同位置的值。
七、置换列
如果想置换A列和B列的数据,可以使用公式:E2=CELL("contents",(INDIRECT(TEXT(MMULT(ROW(1:5)/1%+COLUMN(A:B),1-MUNIT(2)),"r0c00"),)))

输入公式后需要,使用Ctrl+Shift+Enter,然后往下填充公式;
ROW(1:5)/1%+COLUMN(A:B):生成一个4 * 2的数组,{101,101;201,202;...};MMULT(...,1-MUNIT(2)):将上述数组的两列数组置换,结果{102,101;202,201;...};INDIRECT(TEXT(..., "r0c00"):通过INDIRECT间接引用单元格,如r1c02, r1c01;CELL("contents", INDIRECT(...)):通过CELL函数返回单元格的值。
希望这篇文章对你有帮助,您的点赞和收藏是我持续更新文章的最大动力,感谢您的支持。