100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【excel】向左匹配之vlookup index+match lookup

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

时间:2022-08-31 11:32:23

相关推荐

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

比如说现在要解决一个需求,如下图:

在右边表中,通过查找值(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 :从上往下找>=查找值的最小值,查找区域必须降序排序

先说一下0,这种模式对查找区域没有排序要求,从上往下的第一个匹配到的值。这种情况跟vlookup一样,比较贴合实际业务需求,至少我当前遇到的业务需求上用到的基本都是这种。然后是1的情况,1是默认值,如果match()的第三个参数不填的话,默认就是1。这种情况要求查找区域得是升序排序才能奏效。而且获取到的是从上往下能匹配到的最后一个值。如下图所示:

对于中文数据也是,要拼音升序之后才能用。同样是能匹配到的最后一个值

然后是-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的位置。

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

index + match(match_type = 0):取能匹配到的第一个值lookup:取能匹配到的最后一个值

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。