矩阵乘积函数mmult进阶应用8:像if({1,0})一样置换2列数据

小伙伴们,还好吗?今天来分享一下mmult的另一个用法,像if({1,0},..,..)一样置换两列数据的位置,置换后可以用vlookup实现逆向查询。还是来看2个例子。

1.置换2列数值,并用vlookup逆向查询。

我们知道mmult的2个参数都只能是数值,否则会出错,所以我们先从最简单的数值置换说起。如下图左表所示,有2列数值,A列是序号,B列是年龄。我们现在要把这2列的位置置换,结果如④所示,也就是由①变为④。然后再用vlookup根据年龄逆向查询出序号。

我们先来解决置换位置的问题,其实上图已经给出答案了。用mmult来置换,第1参数还是原来的2列数值;关键是第2参数,它是{0,1;1,0}的一个二维数组,也就是上图②的部分。然后用mmult将这2个参数矩阵相乘,得到的结果刚好是置换后的效果,如④所示。

其实,第2参数的结果最开始我也不知道,我是根据①和④倒推出②的结果,也就是根据mmult的第1参数和返回的结果倒推出第2参数是什么,也就是一种尝试和探索吧,结果还得到了答案。所以置换后的公式可以写为=MMULT(D3:E10,{0,1;1,0}),如下图所示。把第2参数用常量数组的方式写出来。

其实这个常量数组还可以用一个函数来产生,这个函数和mmult一样也是个矩阵函数,所以也会和mmult结合使用。它就是munit函数,这个函数返回指定维度的单位矩阵。语法结构为MUNIT(dimension),只有1个参数,必须是大于0的整数。

munit返回的结果是数组。下面看几个演示。=munit(1)返回的结果如①所示;=munit(2)返回的结果如②所示;其他也是一样的。我们可以发现,这个函数返回一个正方形数组,当参数是1时,返回1行1列的正方形;当参数是2时返回2行2列的正方形;当参数是3时,返回3行3列的正方形。其中左上角到右下角的对角线上的值是1,其他值是0。

这个函数的基本原理了解了,那它和我们上面说的第2参数有什么关系呢?如下图所示,我们之前的第2参数如①所示,而=munit(2)返回的结果如②所示。看出它们的差别没有,对角线的位置不同。其实我们用1-munit(2)就得到了第2参数的结果。

所以,之前的常量数组{0,1;1,0}可以用1-munit(2)得到,那么置换后的公式就可以写为=MMULT(D3:E10,1-MUNIT(2))。2列数值置换后,就可以用vlookup逆向查询了,置换后的数组作为vlookup的第2参数。

根据年龄逆向查询序号的公式为=VLOOKUP(I3,MMULT(A3:B10,1-MUNIT(2)),2,)。mmult将2列数值置换后作为vlookup的第2参数,返回第2列,精确查找。

2.置换2列文本,并用vlookup逆向查询

再把题目加深一点,现在要置换2列文本。如下图所示,将左表置换为右表。mmult只能对数字进行运算,所以我们只能把文本变为数字,然后再用mmult置换。下图我把文本转为行号和列号结合的数字,目的是为了得到R1C1样式的文本型单元格地址,最后再用indirect返回单元格的内容。不知道大家还记不记得indirect+text的套路。

首先来看下mmult的第1参数ROW(15:23)/1%+COLUMN(A:B),也就是将文本转为数字的部分,返回的结果如下图灰色部分所示,用行号乘以100再加上列号。第2参数还是1-munit(2),也就是{0,1;1,0}。

所以,置换后的公式为=MMULT(ROW(15:23)/1%+COLUMN(A:B),1-MUNIT(2)),结果如下图绿色部分所示。接下来就要把这些数字转为文本型的单元格地址,比如1502就代表15行2列。

转为文本型单元格地址的公式为=TEXT(MMULT(ROW(15:23)/1%+COLUMN(A:B),1-MUNIT(2)),"r0c00"),结果如红色箭头所示。再下一步,用indirect返回对应的单元格内容。

输入公式=INDIRECT(TEXT(MMULT(ROW(15:23)/1%+COLUMN(A:B),1-MUNIT(2)),"r0c00"),),发现结果是错误的。因为现在indirect形成了多维引用,所以要用t函数降维,正确的公式为=T(INDIRECT(TEXT(MMULT(ROW(15:23)/1%+COLUMN(A:B),1-MUNIT(2)),"r0c00"),)),如下第2图所示。这样就把2列文本置换了。

置换完成后就可以用vlookup逆向查询了,在M15单元格输入公式=VLOOKUP(L15,T(INDIRECT(TEXT(MMULT(ROW(15:23)/1%+COLUMN(A:B),1-MUNIT(2)),"r0c00"),)),2,),完成。

最后,留个思考题,如果要置换1列文本和1列数值,又该怎么办呢?大家可以先想一下,下次再说。

文件链接:

https://pan.baidu.com/s/1Pf1w04j9QV4HA9v8STrQIw

提取码:zwt4

(0)

相关推荐

  • 精通Excel数组公式020:MMULT数组函数

    excelperfect MMULT表示矩阵乘法(matrix multiplication).学习过前面文章的朋友,可能已经意识到乘法矩阵在Excel公式中有很多应用. 如下图1所示,两个不同队的棒 ...

  • 矩阵乘积函数mmult进阶应用7:条件计数

    小伙伴们,大家好.今天继续来说mmult在条件计数中的应用,还是来看两个例子. 1.计算晚点次数(抵达时间大于预计时间) 下图是一个时刻表,记录的是预计到达时间和实际到达时间.现在的问题是求出晚点的次 ...

  • 矩阵乘积函数mmult进阶应用5:累加求和

    小伙伴们,大家好.今天继续来说mmult的累加应用,这次的题目是按指定次数重复内容.有关这个问题,我们之前也说过很多方法,今天来详细说说mmult的方法. 先来看看数据源和最后的效果.下图左表是数据源 ...

  • 矩阵乘积函数mmult进阶应用4:累加求和

    小伙伴们好,不知道mmult有没有让你感觉很晕,反正我是有点晕了.咱们接着昨天的问题继续深入,准备好了吗? 1.计算甲原料在哪个仓库的库存量先达到30,并确定是在哪一天达到此库存量.(增加了原料) 在 ...

  • 矩阵乘积函数mmult应用6:条件计数

    小伙伴们,大家好.现在是特殊时期,希望大家做好防护措施,尽量不外出,更不要聚集,在家也可以找一些事情做,比如看电视,或做一顿好吃的,再不行学一下excel .言归正传,今天来学习下mmult在条件计数 ...

  • 矩阵乘积函数mmult应用3:累加求和

    小伙伴们,大家好.今天来说下mmult的累加求和,累加求和的用处也是挺大的.下面看几个例子吧. 1.计算每天的库存量 下图是一个入库记录表,现在要计算每天的库存量,库存量的计算方法是当天的入库量加上之 ...

  • 矩阵乘积函数mmult基础应用2:条件求和

    小伙伴们,大家好.昨天说了mmult的条件求和用法.今天继续来说下条件求和的应用,加强一下对mmult的理解. 1.对每个人大于80分的成绩求和 这是个单条件求和的问题,方法有很多,比如sum,sum ...

  • 矩阵乘积函数mmult基础应用1:条件求和

    小伙伴们好,今天继续来学习一下mmult的基础用法.先从最简单的求和开始,然后再到条件求和.不知道大家对于mmult的规则了解了多少,还是先来复习一下它的规则.第1参数的列数要和第2参数的行数相同,结 ...

  • 初识矩阵乘积函数mmult的原理和基本用法

    小伙伴们过年好!祝大家在新的一年里健康,平安,自在,百毒不侵.那我们今天也来学习一个新函数的用法,那就是mmult.在官方的解释中,它是返回两个数组的矩阵乘积,实际上乘积之后还要求和,可以看作sump ...

  • cell+多维引用+n(if(1,))+mmult置换2列数据

    小伙伴们好.昨天说了mmult置换2列数值或2列文本的方法,并且在最后给大家留了个思考题,如何置换1列文本和1列数值呢?今天就来说说这个问题.其实大体的思路和昨天的差不多,只是在降维处理的方式上有所不 ...