关于匹配查询,我们平时用的做多的就是VLOOKUP函数了,但VLOOKUP函数只能正向查找,不能逆向查询。
像是下面这种情况就不可以:
(现在我们想用编码去匹配书名)
如果在不改变原表格结构的基础上查找出书目编码对应的书名,直接使用VLOOKUP函数得出的结果是错误的。
现在我们将编码放入书名的前面,再试一下就能成功匹配出来书名了:
工作中很多时候我们无法改变数据源的列排序,在不改变原表格结构的情况下应该如何逆向查找匹配呢?
试试下面几种方法。
一、VLOOKUP、IF函数嵌套
利用 VLOOKUP 和 IF 函数的嵌套处理:
=VLOOKUP(F3,IF({1,0},$B$3:$B$15,$A$3:$A$15),2,0)
公式解析:通过IF({1,0})函数将A列和B列位置互换,然后在B列精确匹配与F3单元格相同的单元格,并返回互换后的区域对应第2列即A列的数据。
二、VLOOKUP、CHOOSE函数嵌套
利用 VLOOKUP 和 CHOOSE 函数的嵌套处理:
=VLOOKUP(F3,CHOOSE({1,2},$B$2:$B$15,$A$2:$A$15),2,0)
公式解析:通过CHOOSE({1,2})函数将A列和B列位置互换,然后在B列精确匹配与F3单元格相同的单元格,并返回互换后的区域对应第2列即A列的数据。
三、LOOKUP函数
=LOOKUP(1,0/($B$3:$B$15=F3),$A$3:$A$15)
公式解析:B列满足等于F3的条件的逻辑值为TRUE,被0除后,就是0;其他不满足条件的逻辑值为FALSE,被0除后,就是“#DIV/0!”的错误值;通过LOOKUP在一批错误值和0组成的数列中,返回比1小的最大值,也即是0值(满足F3条件的行)对应的A列数据。
因为lookup采用二分法的方式,二分法的前提是先排序。因此很多人使用lookup函数发现效果不好,找的结果不对。
为了处理这种方式,采用“0/运算结果”的方式,自动忽略错误值。
因此,要用好lookup,要使用以下结构:
=lookup(1,0/(查询范围=查询值),结果范围)
四、Index、 match函数嵌套
利用 Index 和 match 函数的嵌套处理:
=INDEX($A$3:$A$15,MATCH(F3,$B$3:$B$15,0))
公式解析:通过INDEX定位到A列,并根据MATCH函数返回F3在B列中所在的行号,得到对应A列数据。
学习 INDEX 和 MATCH 的组合函数用法,看这里!EXCEL好搭档~ INDEX+MATCH
五、Offset、match函数嵌套
利用 Offset 和 match函数的嵌套处理:
=OFFSET($A$2,MATCH(F3,$B$3:$B$15,0),)
公式解析:以A列A2单元格为基准位置,向下偏移N行,而N就是通过match函数查找到的F3在B3:B15这片区域中的位置。
不懂 可以看这篇讲解,OFFSET和MATCH函数组合查询 我觉得说的特别通俗易懂,相信你一看就明白怎么用了。
六、Indirect、match函数嵌套
利用 Indirect 和 match函数的嵌套处理:
=INDIRECT("A"&MATCH(F3,B:B,0))
公式解析:通过match函数查找到F3在B列中的行号,列标“A”和行号构成的文本字符串表示单元格位置,用indirect函数引用这一单元格位置的具体内容。
Indirect函数用于返回文本字符串指定的单元格引用;它共有两个参数,第一个参数是文本字符串,第二个参数是引用类型,特别要注意第一个参数必须为文本,否则会返回错误。
以上就是全部了,希望工作学习中都可以帮助到你。