今天我们介绍一种黄金组合,INDEX+MATCH函数组合,如下图所示,我们要通过两个条件姓名和科目来查询对应的信息
那么我们在B10单元格中输入公式
=INDEX(A2:F7,MATCH(A11:A12,B2:B7,0),MATCH(B10:D10,A1:F1,0))
回车之后就可以得到如下结果
在这里我们不再是简单的线性思维,它不是直接的在问Tom的数学成绩是多少?而是使用了一种定位的坐标思维,这两个函数的组合的背后意义就是在问,请先定位Tom在数据表中的行号,然后再定位数学在表头中的列号,最后用这两个坐标去数据表中查找交叉值。
接下来咱们把这个公式给一层层的剥开来详细的解释,
INDEX函数的作用是根据给定的行号和列号,从一个指定的数据区域中返回相对应位置的值,
INDEX函数的语法结构,
参数一数组,就是咱们的数据区域,行号和列号,就是要从这个区域里面来查找的。
参数二行序数,就是说明了我们的查找值在数据区域中的第几行,比如说Tom就在查找区域的第一行
参数三列序数,就是说明了我们的查找值在数据区域中的第几列,比如Tom就在查找区域的第一列。
如此的话INDEX函数只要知道了具体坐标就可以在数据区域中查找对应的值。
组件二MATCH函数
MATCH函数的作用是在一个区域中查找特定的值,并返回它在该区域中的相对位置
MATCH函数的语法结构,
参数一查找值,就是我们要找的那个东西
参数二查找区域,就是我们要去哪里找这个东西
参数三匹配类型,这是关键。0 代表精确匹配,1 代表小于等于查找值的最大值(需区域升序),-1 代表大于等于查找值的最小值(需区域降序)。在大部分的情况下,我们都会使用 0,因为它精确匹配,最精准。
MATCH函数返回的是值的位置而不是值本身,这种性能正好和INDEX函数搭配,MATCH函数负责查找坐标,INDEX函数负责提取数值。
第一个MATCH函数公式MATCH(A11:A12,B2:B7,0),这是用来查找行号的,在这里我们不是一个一个学生的查找,而是同时查找A10和A11单元格里的两个学生,
并返回他们在B2:B7区域中的位置
最后会返回一个包含两个数字的数组
第二个MATCH函数MATCH(B10:D10,A1:F1,0)这是列坐标生成器,它要做的也不是查找一个科目,而是同时查找B9到D9单元格里的三个科目,
并返回他们在A1到F1区域的相对位置。
最终会返回一个包含三个数字的数组
通过这两个MATCH函数的组合,就给INDEX函数提供了一个行号数组和一个列号数组,INDEX函数接收到这两个数组后,会执行一种笛卡尔积式的提取,即用第一个行号去匹配所有的列号,再用第二个行号去匹配所有的列号,最终生成一个二维的结果矩阵。
截止到现在基本理论知识我们已经明白了,我们来介绍一下公式的具体执行流程。
步骤一 Excel会首先计算内部的第一个MATCH函数 MATCH(A10:A11,B2:B7,0)
MATCH(“Tom”,B2:B7,0) 在B2:B7中查找Tom,可以看到他在第一个位置,输出数字1
MATCH(“Bob”,B2:B7,0) 在B2:B7中查找Bob,可以看到他在第六个位置,输出数字6
由于在这里我们的查找值A10:A11是一个数组,MATCH函数会分别计算,然后将结果组合成一个垂直数组{1,6}
输出结果
步骤二计算列坐标数组
接着公式会计算第二个MATCH函数=MATCH(B9:D9,A1:F1,0)
=MATCH(“班级”,A1:F1,0) 在A1:F1区域中查找”班级”,就会输出它所在的位置1
=MATCH(“语文”,A1:F1,0) 在A1:F1区域中查找”语文”,就会输出它所在的位置3
=MATCH(“化学”,A1:F1,0) 在A1:F1区域中查找”化学”,就会输出它所在的位置6
同样的由于查找值是一个数组,MATCH函数将会返回一个水平数组{1,3,6}
步骤三将坐标代入INDEX函数,现在原始公式在内部已经被翻译成了=INDEX(A2:F7,{1;6},{1,3,6})
接下来INDEX函数就会处理这两个数组,具体的执行逻辑是这样的,
1-取出行数组的第一个元素1
2-用行号1与列数组的每一个元素{1,3,6}进行组合,生成一行结果
=INDEX(A2:F7,1,1) 返回数据区域的第一行第一列交叉值
=INDEX(A2:F7,1,3) 返回数据区域的第一行第三列交叉值
=INDEX(A2:F7,1,6) 返回数据区域的第一行第六列交叉值
这三个值就构成了结果区域的第一行
同样的道理,INDEX函数会取出行号6与列数组的每一个元素再次组合,这里就不赘述了。
最终的结果,返回一个2*3列的二维数组,并返回到工作表中。
Excel同学会VIP会员 8套Excel核心课程+专属VIP答疑+定制插件,只要499元! 一次开通,长期有效
暂无评论内容