矩阵乘积函数mmult进阶应用5:累加求和
小伙伴们,大家好。今天继续来说mmult的累加应用,这次的题目是按指定次数重复内容。有关这个问题,我们之前也说过很多方法,今天来详细说说mmult的方法。
先来看看数据源和最后的效果。下图左表是数据源,A列是要重复的内容,B列是要重复的次数。返回的结果如D列所示。在D2单元格输入公式=LOOKUP(ROW(A1),MMULT(N(ROW($1:$5)>COLUMN(A:D)),B$2:B$5)+1,A$2:A5)&"",下拉完成。
咱们还是先看mmult的部分,它的第1参数N(ROW($1:$5)>COLUMN(A:D)),返回的结果如下图①所示,也就是用纵向的1到5和横向的1到4进行大于的比较。如果不理解,可以看面第2张图,n是将逻辑值转为数值。第2参数是B$2:B$5,也就是要重复的次数。
然后用mmult把第1参数和第2参数矩阵相乘,返回的结果是{0;2;5;6;10},如上上图④所示。这样就是对第2参数的累加运算,但是累加的结果是从0开始的。这样累加有它的用处,是为了后续的处理。mmult返回的结果是怎么得到的就不用我说了吧。
接下来就是用lookup来返回要重复的内容,lookup的第1参数是ROW(A1),也就是{1};第2参数是mmult返回的结果加1,也就是{1;3;6;7;11},加1是为了找到区间分段的值;第3参数是A$2:A5。这样的话公式就是下图所示,第1参数1在第2参数中找到1,然后返回第3参数对应的内容"A"。
当公式下拉时,lookup的第1参数变为2,第2和第3参数不变,那么公式为下图所示。第1参数2在第2参数中找到1,返回第3参数中对应的内容"A"。
公式再下拉时,lookup的第1参数变为3,第2和第3参数不变,那么公式为下图所示。第1参数3在第2参数中找到3,返回第3参数对应的内容"B"。
其他公式也是这样理解的,还需说明的一点是最后为什么要连接空文本,也就是&""。因为随着公式的下拉,当要重复的内容全部显示完之后,再下拉就会引用空单元格,而引用空单元格返回的结果是0,&""就是为了让空单元格的0变为空文本。
还有上面我截图的3个公式,其实第3参数是引用,不是数组。我按了F9是为了让大家好看。如果是数组的话,当第1参数大于等于11时,lookup就算&""返回的结果还是"0",如果是引用的话,第1参数大于等于11时,lookup返回的结果就是空文本。
这个题目的关键是通过mmult累加的方式找到区间分段的值,也就是{1;3;6;7;11},这个要大家好好理解一下。
我们也可以用区域数组的方式输出结果,选中10个竖向的单元格,输入公式=LOOKUP(ROW(INDIRECT("1:"&SUM(B2:B5))),MMULT(N(ROW(1:5)>COLUMN(A:D)),B2:B5)+1,A2:A5),按三键结束。
这个题目除了用mmult,我们也可以用offset的多维引用,大家参考文件。
文件链接:
https://pan.baidu.com/s/1HPVh452AUzD1-SkBGmePlA
提取码:ey0t