【excel】向左匹配之vlookup、index+match、lookup

本文介绍了在Excel中如何实现向左匹配,包括vlookup、index+match和lookup三种方法。Vlookup需要构造虚拟表,可能效率较低;index+match灵活性高,适用于各种匹配方式,match函数的match_type=0适合多数业务需求;lookup则能匹配到最后一个值,但对查找区域有特定要求。作者推荐使用index+match(match_type=0)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比如说现在要解决一个需求,如下图:
在右边表中,通过查找值(D列),在左边表中匹配到对应的目标值(A列)。这里分析几个方法。
在这里插入图片描述

方法一:vlookup :将从右往左的需求转换成从左往右来实现

= vlookup(D2, if({1,0}, B:B, A:A),2, 0)

在这里插入图片描述

结果如上图所示,

  • 首先,这种方式取的是从上往下能匹配到的第一个值
  • vlookup本质上是通过查找值在一个锁定的区域中从左往右匹配检索,那么在从右往左检索的需求中,如果要使用vlookup来实现的话,就需要强行构造一个从左往右检索的虚拟表。上面这个公式的写法中,通过if({1,0}, B:B, A:A)在内存中构建一个B列在左,A列在右的2列n行的矩阵,然后在这个矩阵的基础上进行从左往右的检索。
  • 有大佬说这种方法运算效率比较低不建议使用。

方法二:index + match:灵活性高

= index(A:A, match(D2, B:B, 0))

在这里插入图片描述

  • 原理就是通过match函数找到查找值在查找区域中的行位置,然后通过index函数在目标值区域用该行位置找到目标值。因此,这个公式并不受限于从右往左或者从左往右匹配的方式,它都能适用。
  • 然后讲一下match函数的第三个参数match_type,有3个值可选(默认值是1):
    - 0 :精准匹配,从上往下能匹配到的第一个值
    - 1 :从上往下找<=查找值的最大值,查找区域必须升序排序
    - -1 :从上往下找>=查找值的最小值,查找区域必须降序排序
  1. 先说一下0,这种模式对查找区域没有排序要求,从上往下的第一个匹配到的值。这种情况跟vlookup一样,比较贴合实际业务需求,至少我当前遇到的业务需求上用到的基本都是这种。
  2. 然后是1的情况,1是默认值,如果match()的第三个参数不填的话,默认就是1。这种情况要求查找区域得是升序排序才能奏效。而且获取到的是从上往下能匹配到的最后一个值。如下图所示:

    对于中文数据也是,要拼音升序之后才能用。同样是能匹配到的最后一个值
    在这里插入图片描述
  3. 然后是-1的情况,这种情况要求查找区域得是降序排序才能奏效。而且获取到的是从上往下能匹配到的第一个值。如下图所示:
    在这里插入图片描述
    来看中文数据的情况下:
    在这里插入图片描述
    直接不能用了。查找区域按降序排了,但是这个公式还是报错了。
    因为在我们日常需求中,中文数据的情况其实非常多,所以match_type = -1的方式,并不建议使用;然后1和-1都是需要对查找区域进行排序后才能使用,我认为是低效率的做法,并且我个人不喜欢这种操作,所以我更倾向于用match_type = 0的方式。

方法三:lookup:转换成1找0,匹配最后一个找到的值

= LOOKUP(1, 0/(D2=B:B), A:A)

在这里插入图片描述

  • 如上图所示,lookup获取到的是最后一个匹配到的值.
  • lookup的三个参数含义是,在参数2中查找参数1的位置,然后返回参数3中该位置的值。所以这个公式的意思就是在0/(D2=B:B)中查找1的位置,然后返回A列中该位置的值。
  • 所以重点在于0/(D2=B:B),这里计算的是:用D2=B:B生成一个TRUE和FALSE的列,然后用0去除以TRUE和FALSE得到一个只有0和错误值的内存虚拟表(如下图),然后用1在只有0和错误值的表中查找,因为lookup的特性,只能匹配到小于等于参数1的值,所以就匹配到了0,然后因为lookup获取到的是能匹配到的最后一个值,所以锁定的是最后一个0的位置。
  • 在这里插入图片描述

所以综上所述,向左匹配,个人比较推荐的方法是:

  1. index + match(match_type = 0):取能匹配到的第一个值
  2. lookup:取能匹配到的最后一个值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值