字符串模糊查找_Vlookup的9种查找方式,灵活运用函数原来这么简单!

这两天看了不少网上的教程,也找了一些题库实战,整理一下EXCEL中VLOOKUP函数的常用技巧。

首先了解一下绝对引用相对引用的概念,EXCEL默认横向拉动的时候列变行不变,竖向拉动的时候行变列不变。

  • 绝对引用时无论横向还是竖向拉动,行列都不变
  • 相对引用时,$在行前面则横向竖向行动都不变,$在列前面则横向竖向拉动列都不变

基础查找

VLOOKUP(查找目标,查找区域,返回列,0)

下面是一个实例:
在员工信息表中根据员工工号查询员工姓名,我想要在D1:G9的表格区域中查找工号分别为A01048、A05023、A09095的员工姓名,首先查询工号A01048的员工姓名,之后可以直接下拉公式,表格自动填充结果。

注意:此公式查找目标一定要在查找区域的第一列,比如我通过工号查姓名,那么工号必须在查找区域的第一列,即D1:G9;如果是通过姓名查部门,那么查找区域需要是E1:G9,而且查找区域需要用 $ 符号绝对引用,不然下拉公式的时候区域变化可能会查不到数据。

返回列指查询内容所在列,如我想要查找的是姓名,姓名这一列在D1:G9区域的第二列,所以返回列的值是2,以此类推。

最后一个参数0或1表示函数精确查找或模糊查找。精确即完全一样,模糊即包含的意思。参数如果指定值是0或FALSE就表示精确匹配,而值为1或TRUE时则表示模糊匹配,漏掉该参数则默认模糊匹配。

精确匹配是使用历遍法查找,模糊匹配是使用二分法查找。

ac7b3c92b52eb06742e559152f26a844.png

公式01

多列查找

VLOOKUP(查找目标,查找区域,COLUMN(A1/B1/C1...),0)

上例通过工号查询姓名,如果想要通过工号同时查询姓名和部门,则可以使用COLUMNS函数。不使用COLUMNS函数往右拖动返回列的值不变,无法查询其他列。

657370aa5214c26fae510f364f65f94c.png

不使用函数直接拖动

使用COLUMNS函数,A1、B1、C1...分别代表1、2、3...,向右拖动直接变化返回列,返回列的值递增。注意不要忘了相对引用查找目标,固定列,此例中为$A3。

ac7b3c92b52eb06742e559152f26a844.png

公式02

字符的模糊查找

VLOOKUP("*"&查找目标&"*",查找区域,返回列,0)

如我并不知道具体的工号,只知道工号中包含A05,就可以使用模糊查找。第四个参数0是使用遍历法进行精确查找,因此当从上而下查找到包含A05的工号,即停止查找。举例来说,张丽和夏远的工号都包含A05,但是查找出的姓名是张丽,因为张丽在前面。

48ac7a9ada55221a875ec405c28c7ad6.png

公式03

数字的区间查找

VLOOKUP(查找目标,查找区域,返回列,1)

由于二分法的原理,引用的数字区域一定要从小到大排序,杂乱的数字是无法准确查找到的。模糊查找的原理是:给一定个数,它会找到和它最接近,但比它小的那个数。

2f3c0fef8bc68cd80d61be663ec8f302.png

公式04

反向查找

VLOOKUP(查找目标,IF({1,0},查找列,区域列),返回列,1)

注意:这里其实不是VLOOKUP可以实现从右至左的查找,而是利用IF函数的数组效应把两列换位重新组合后,再按正常的从左至右查找。

IF({1,0},查找列,区域列)这是本公式中最重要的组成部分。在EXCEL函数中使用数组时,返回的结果也会是一个数组。这里1和0不是实际意义上的数字,而是1相关于TRUE,0相当于FALSE,当为1时,它会返回IF的第二个参数(查找列),为0时返回第二个参数(区域列)。

2f3c0fef8bc68cd80d61be663ec8f302.png

公式05

多条件查找

{=VLOOKUP(查找条件A & 查找条件B,IF({1,0},区域A & 区域B,查找区域),返回列,1)}

根据员工号和姓名两个条件查询部门,输入公式=VLOOKUP(A3&B3,IF({1,0},E1:E9&F1:F9,G1:G9),2,0)

以后按ctrl+shift+enter自动变成数组形式

{=VLOOKUP(A3&B3,IF({1,0},E1:E9&F1:F9,G1:G9),2,0)}

6e86a3436edf540bc8a408a9eb5542fb.png

公式06

公式剖析:

  • A3&B3 把两个条件连接在一起。把他们做为一个整体进行查找。
  • E1:E9&F1:F9,和条件连接相对应,把工号和姓名列也连接在一起,作为一个待查找的整体。
  • IF({1,0},E1:E9&F1:F9,G1:G9) 用IF({1,0}把连接后的两列与G列数据合并成一个两列的内存数组。按F9后可以查看的结果。
  • 完成了数组的重构后,接下来就是VLOOKUP的基本查找功能了,另外公式中含有多个数据与多个数据运算,所以必须以数组形式输入,即按ctrl shift后按ENTER结束输入。

批量查找

{=VLOOKUP(B$9&ROW(A1),IF({1,0},$B$2:$B$6&COUNTIF(INDIRECT("b2:b"&ROW($2:$6)),B$9),$C$2:$C$6),2,)}

ed6eb86259b305ca427d440cb5d097ad.png

公式07

公式剖析:

  • B$9&ROW(A1) 连接序号,公式向下复制时会变成B$9连接1,2,3。
  • 给所有的张一进行编号。要想生成编号,就需要生成一个不断扩充的区域(INDIRECT("b2:b"&ROW($2:$6)),然后在这个逐行扩充的区域内统计“张一”的个数,在连接上$B$2:$B$6后就可以对所有的张一进行编号了。
  • IF({1,0}把编号后的B列和C组重构成一个两列数组。

跨表查找

VLOOKUP(查询目标,查询表!查询区域,返回列,0)

下例跨表查询员工所在部门。

b56675d2331bb72683627f2a654425e6.png

公式08

跨工作表的时候,会以!代表工作表的名字。

跨多表查找

VLOOKUP(查询目标,INDIRECT(工作表名 &查询区域),返回列,0)

如汇总查询各个表中同一个人的工资信息,公式为:=VLOOKUP($A3,INDIRECT(B$2&"!A1:B9"),2,0)

查询区域使用INDIRECT函数构造引用区域,INDIRECT()函数的功能:返回由文本字符串所指定的引用,语法格式为 INDIRECT(ref_text,[a1]),ref_text 为对单元格的引用。

indirect函数的引用的两种形式:加引号和不加引号

  • =INDIRECT("B2")——加引号:文本引用——即引用B2单元格所在的文本(1月工资)。
  • =INDIRECT(B2)——不加引号:地址引用——因为B2的值为1月工资,1月工资是工作表的名字,所以引用工作表的区域。

$A3 和 B$2 代表相对引用。

4a36772f0fd7753b6d35917c57a29c16.gif

公式09

如果不知道查询目标在哪个表里,则使用公式:

IFERROR(VLOOKUP(查询目标,A表!查询区域,返回列,0),

VLOOKUP(查询目标,B表!查询区域,返回列,0),.....

VLOOKUP(查询目标,N表!查询区域,返回列,0))

意思是从A表开始查询,前面的查询不到就到后面的表中查找。如果有更多的表,那就一层层的套用下去,一直到最后一个N表。

可以简化为:

=VLOOKUP(查询目标,INDIRECT(LOOKUP(1,0/COUNTIF

(INDIRECT({"A表";"B表";"...";"N表"}&"!a:a"),查询目标),{"A表";"B表";"...";"N表"})&"!查找区域"),返回列,0)

  • {""}:大括号内是要查找的多个工作表名称,用逗号分隔
  • a:a :本例是姓名在各个表中的A列,如果在B列则为b:b
End.
作者:栗子
来源:豆瓣
本文为转载分享,如有侵权请联系后台删除
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值