vlookup+text实现逆向查询
小伙伴们,大家好。今天要分享的内容是用vlookp+text实现逆向查询。如果excel函数基础好的同学,肯定知道vlookup+if({1,0},..,..)可以实现逆向查询,主要是用if({1,0},..,..)来实现两列数据的位置转换,然后用vlookup查询。其实text也可以转换两列数据的位置,而且最多可以转换4列数据,而if只能转换2列数据。
下面看一个简单的例子,根据姓名逆向查找部门。如果用vlookup+if,公式为=VLOOKUP(D2,IF({1,0},B2:B10,A2:A10),2,)。
=IF({1,0},B2:B10,A2:A10)这部分就是将AB两列的位置置换了一下。如下图所示。
如果用text该如何置换两列数据的位置呢?我们知道text第2参数的格式代码可以用3个分号分隔为4部分,分别是正数,负数,零,文本。正是因为可以分为4部分,所以text最多可以置换4列数据。由于此时我们只需转换2列数据,所以格式代码只需要两部分,也就是这样的样式=text(第1参数,"正数/0;负数")。
当格式代码只有2部分时,第1部分是正数和0,第2部分是负数。所以我们用text({1,-1},"正数;负数")的方式来取得对应的值。=text({1,-1},"正数;负数")返回的结果为{"正数","负数"},如下图所示。1是正数所以返回格式代码的第1部分正数;-1是负数,返回格式代码的第2部分负数。
下面,我们就可以把部门列和姓名列的内容放到text的格式代码中,如下图所示,公式为=TEXT({1,-1},"蒋娜薇;A"),1返回姓名蒋娜薇,-1返回部门A。这样的话就把2列的位置对调了。
但是上一步的姓名和部门是我手写的,为了大家好看。写公式的时候还是要引用单元格的,公式为=TEXT({1,-1},B2&";"&A2),将姓名和部门连接起来作为text的格式代码,中间用分号分隔。此时我们只引用了一个姓名和部门,接下来就要引用多个姓名和部门。
=TEXT({1,-1},B2:B10&";"&A2:A10)这部分就是将上面的一个单元格改为一个区域,用整列姓名连接整列部门。返回的结果如下图所示,发现有一些出错了。这是由一些特殊代码造成的,比如B,D,E。D在text的代码中代表天数。为了解决这个问题,我们需要将这些特殊意义的代码强制转为文本。
=TEXT({1,-1},""""&B2:B10&""";"""&A2:A10&"""")这部分就是强制转为文本,只需在姓名和部门的两侧连接上双引号,返回的结果如下图所示,已经把2列数据置换好了。这里要注意的问题就是双引号的个数,由于text的第2参数中已经有双引号了,要在双引号中加双引号,就是2倍的双引号。这里有点绕,我就把添加的双引号标为红色,大家慢慢理解。
下面还是举一个简单的例子,说下双引号的问题。比如我们要把a和b连接起来,公式为="a"&"b"。如果要把双引号和b连接起来,就要把a替换为2个双引号,如下图红色所示。
说了这么多,终于用text实现了两列数据的转换。接下来就是用vlookup查询了。在E2单元格输入公式=VLOOKUP(D2,TEXT({1,-1},""""&B2:B10&""";"""&A2:A10&""""),2,),按ctrl+shift+enter三键结束。
其实将两列数据或者多列数据置换位置的方法除了if({1,0},..,..),text({1,-1},..,..),choose({1,2,3},..,..,..)之外,还可以用cell+n(if(1,..))+多维引用来实现,只不过有点复杂。
如果你有其他的方法,欢迎在留言区写出你的答案,让我们一起学习。
文件链接:
https://pan.baidu.com/s/1v6v2WpjuMLyK0K26_LqvBw
提取码:sqr9