数组运算6(方向不同的一维数组的运算)
今天来说数组运算的最后一种运算方式,方向不同的一维数组间的运算,也就是横向一维数组与纵向一维数组的运算。
-01-
运算规则
如下图所示,是一维纵向数组与横向数组的连接运算。它们运算的结果是一个二维数组,二维数组的行数取一维纵向数组的行数,列数取一维横向数组的列数。二维数组的元素个数是2个一维数组元素个数的乘积。下面这个例子中二维数组有9个元素,是横向数组3个元素与纵向数组3个元素的乘积。
我们知道了它们的运算结果,那么它们的运算方式是怎么样的呢?简单来说可以看作是交叉运算的,也就是行列交叉。实际上是第一个数组的第1个元素分别与第二个数组的所有元素一一运算,然后第一个数组的第2个元素分别与第二个数组的所有元素一一运算,以此类推。
第一数组的第1个元素1,分别与第二个数组的所有元素4,5,6一一连接运算,形成14,15,15。然后2与4,5,6运算,形成24,25,26···。
运算过程其实就是这样的,就看你怎么理解了。下面再提供一种理解方式,也是我们之前提到过的方法。
我们已经知道了运算结果的尺寸大小,所以可以把纵向一维数组{1;2;3}扩展到和结果一样的尺寸,如下图红色1部分所示;同样地,横向一维数组{4,5,6}也扩展成和结果一样的尺寸,如下图红色2部分所示。然后就相当于对2个二维数组进行运算,这样就比较容易对应了。
-02-
具体应用
1.根据姓名和科目查询出对应的成绩。
下图左表是个成绩表,右表是查询表。姓名和科目那里我设置了数据验证,可以通过下拉三角对姓名和科目进行选择,这样可以动态查询出某人某科的成绩。而且左表设置了条件格式,可以和右表查询出的成绩进行对比。
当姓名选择小树,科目选择数学后,自动查询出成绩为81。而且左表也自动标记出小树的数学成绩为81。在G12单元格中输入公式=MAX((G10=A11:A15)*(G11=B10:D10)*B11:D15),按ctrl+shift+enter三键。
G10=A11:A15这部分是将A列中的姓名与G10单元格的姓名比较,相等的返回true,否则返回false,形成了一维纵向数组。
同样地,G11=B10:D10这部分是将所有的科目与G11单元格的科目比较,相等的返回true,否则返回false,形成了一维横向数组。
(G10=A11:A15)*(G11=B10:D10)这部分就是将比较后的一维纵向数组与横向数组进行相乘运算,形成了二维数组,结果如下图。这样就把我们需要查询的姓名和科目的位置找到了。
然后再用上面的二维数组乘以所有成绩,就得到了我们要找的成绩,也就是这部分(G10=A11:A15)*(G11=B10:D10)*B11:D15。这样不满足查询条件的显示为0,满足的显示出她的成绩。此时还是个二维数组,所以最后用max取最大值,或者也可以用sum求和。
最后说下左表中条件格式的公式=(MATCH($G$10,$A$11:$A$15,)=ROW(B11)-10)*(MATCH($G$11,$B$10:$D$10,)=COLUMN(B11)-1)。
文件链接:
https://pan.baidu.com/s/1MLhgxnmwKA-Tj5KHgfus8A
提取码:r5al
如果对你有所帮助或启发,请打赏或分享一下,你的支持就是我最大的动力!
此公众号没有留言功能,如果有问题可以发到邮箱715704566@qq.com,有时间会回复的。
关注解锁更多函数的用法