分享一个数据查询有关的内容,先看数据源:
左侧是员工信息表,右侧是查询区域,希望在G4输入任意姓名或者任意部门,就能在右侧提取出符合条件的全部记录。
要实现这样的数据提取效果,其实很简单,接下来咱们就看看具体的操作步骤。
步骤1
在G4单元格输入要查询的内容,比如 销售部。
步骤2
在第一行数据的左侧,本例是A4单元格,输入以下公式,向下拖动:
=(C4=G$4)+(B4=G$4)+A3
公式是什么意思呢?
如果C4单元格中的部门等于G4要查询的部门,或者是B4单元格中的姓名等于G4单元格要查询的姓名,就在上一个单元格的基础上加上1,否则仍然是上一个单元格中的内容。
观察公式下拉后的效果,可以看到,只要C列的部门名称等于G4单元格中的部门,得到的结果正好是一串递增的序号1……2……3……
这些序号干嘛用呢?不着急,往下看。
步骤3
在I4单元格输入公式,向右向下复制,就可以得到查询结果了:
=IFERROR(VLOOKUP(ROW(A1),$A:$E,COLUMN(B1),0),"")
这个公式又是啥意思呢?
这里面的主角是VLOOKUP函数,要查询的内容是ROW(A1),ROW的作用是返回参数所在的行号,这里得到的结果就是A1的行号——1,当公式向下复制时,会依次变成ROW(A2)、ROW(A3)……,结果就是从1开始的递增序号1、2、3……。
也就是说,在不同行中VLOOKUP函数的查找内容是不一样的,在第四行时,查找的内容是1,公式到了第五行,查询的内容就是2了。
再看看VLOOKUP函数查询的区域是哪里呢?$A:$E ,这个写法表示A~E列的整列区域,并且使用了绝对引用。
说到这里,有小伙伴们已经知道咱们前面用公式得到的那些序号是干嘛用的了,对,就是协助VLOOKUP查询用的。
前面的序号特点是每遇到一个符合条件的记录,序号就加上1,而VLOOKUP要查询的内容就是序号1、2、3……
再来看COLUMN(B1)是干啥用的呢?她的作用和ROW函数类似,是返回参数的列号的,COLUMN(B1),得到的就是B1的列号2。公式向右复制时,会依次变成COLUMN(C1)、COLUMN(D1)……,结果就是从2开始的递增序号2、3、4……
得到的序号再给VLOOKUP函数当小三,不对不对,是当成第三参数,用来指定返回查询区域中哪一列的内容。
当公式在I列时,返回查询区域第二列的内容,公式向右复制到了J列,那就是返回查询区域第三列的内容了,以此类推。
小伙伴可能会说了,A列还有那么多重复的序号啊,没关系,因为VLOOKUP函数有个特点,就是如果有多个符合条件的记录,只会返回第一条。所以在I4单元格查询1的时候,得到序号1对应的姓名兰花,在I5单元格查询2的时候,得到序号2对应的姓名枣花……
最外面的这个IFERROR是干啥用的呢? 她啊,是用来给VLOOKUP屏蔽错误值的。
因为VLOOKUP每一行中的查询序号都不一样,当公式一直下拉时,这个序号就会不断增加,当查询的序号在A列没有出现时,说明左侧记录中没有这么多符合条件的内容了,公式会返回错误值。所以,咱们使用IFERROR函数把错误值变成了空文本。