返回Excel催化剂目录

产品文档 / Excel催化剂

第38波-比Vlookup更好用的查找引用函数

谈起Excel的函数,有一个函数生来自带明星光环,在表哥表姐群体中无人不知,介绍它的教程更是铺天盖地,此乃VLOOKUP函数也。 今天Excel催化剂在这里冒着被火喷的风险,大胆地宣布一个比VLOOKUP更好用更易用的自定义函数诞生,有它之后,VLOOKUP可减少50%以上的使用频率,性能某些场景上

谈起Excel的函数,有一个函数生来自带明星光环,在表哥表姐群体中无人不知,介绍它的教程更是铺天盖地,此乃VLOOKUP函数也。

今天Excel催化剂在这里冒着被火喷的风险,大胆地宣布一个比VLOOKUP更好用更易用的自定义函数诞生,有它之后,VLOOKUP可减少50%以上的使用频率,性能某些场景上较VLOOKUP更强悍,运算速度数倍于VLOOKUP。

一般性现状

一般在Excel小白用户眼中,看到VLOOKUP函数可以一口气帮忙查找匹配出整列多条的记录时,想必是惊呆了一般,若换成人工去查找或厉害一点懂得用查找替换界面去查找的人来说,这可是极大的效率上的提升,简单无比的神奇。

但对于每天不断地在VLOOKUP函数不断重复使用的熟练表哥表姐们来说,VLOOKUP函数并非那么完美,就算请出它的大哥LOOKUP函数来,也仅有些许的改善而已,还是没能达到一种随心所欲同时兼顾性能上的流畅的感觉。

VLOOKUP的局限性

1.只能引用区域里的首列

若查找引用区域的引用列不在第1列,需要手动调整数据列的顺序,可能部分原因不允许调整列顺序或调整列顺序对原有数据不友好。有一致使问题是若多列的方式查找引用,需要费劲地另外做一个辅助列放到引用区域的首列

2.返回的结果值需要去手动数是对应查找引用区域的首列的右侧第几列

当查找引用的区域里的列数太多,需要很小心地去观察或手工数是第几列。

3.在模糊匹配中,对查找引用区域的数据源有排序的要求

对数据源要求排序,在标准的数据表结构的数据里是不太合理的要求,一不小心就破坏了排序升序这个要求。

4.当查找值对应的表的记录数过多时,使用VLOOKUP的效率很低

一般使用VLOOKUP的场景为:需要从一些属性表里引用一些属性列的内容,在查找值的表一般定义为流水表,数据记录数随着时间推移,数据记录数很大,动不动一个VLOOKUP函数下来,Excel就卡个半天没动静。

Excel催化剂查找引用函数使用场合

因Excel催化剂的自定义函数,使用数组函数的方式输出,一次性多个结果输出,某些场景下可显著提升速度。

在避免上述提及到的VLOOKUP使用的局限性上,Excel催化剂查找引用函数更适合的场景为在一个流水表里,需要到一些属性表里去查找引用一些扩展属性。

一般来说,属性表的记录数不会太大,而对应的流水表里,需要查找的值会有大量的重复值出现,在Excel催化剂的函数处理方式中,仅对唯一值进行计算,多个重复值也只会计算一次。

若满足上述提到的场景,速度性能必定比直接使用VLOOKUP要高出许多。

函数详细使用介绍

函数:CZYY查找引用LOOKUP

1.查找列为一列的时候,且仅为精确查找时

直接写入前三个参数。

返回列ReturnValueRange的位置不限制于在引用列ReferenceRange的左边还是右边。

查找值区域、引用区域和返回区域仅能输入一列的数据。

内容插图

内容插图

2.查找列为多列的时候,且仅为精确查找时

使用辅助函数FZGetMultiColRange来引用多列的内容(和上一篇的函数【FZJS分组列合并】是一样的,因较多的场景需要使用,把它重新定义了全英文名称方便书写)。

查找列LookupValueRange和引用列ReferenceRange,仅需按顺序两者输入多列,无需在数据源中使用辅助列来构造新列。

内容插图

内容插图

3.当需要使用模糊查找时

VLOOKUP的模糊查找,在一些区间定义的场景特别好用,Excel催化剂的自定义函数亦提供此功能。

因VLOOKUP函数算法处理的原因,要求升充排序,但本次开发的自定义函数无需提前升序排列亦可处理。

因一般性的场景是大量的重复数据需要标记引用区域的返回列的内容,故虽算法不如原生VLOOKUP的先进,但在大量重复数据的情况下,性能的优越性不输原生的VLOOKUP,同时对数据源无需额外排序要求。

内容插图

VLOOKUP仅支持的升序排列取最后一个小于等于查找值的记录,本次自定义函数对其进行扩展,可实现对数据降序排列后,取最后一个大小等于查找值的记录。

内容插图

VLOOKUP的模糊查找时,查找值的内容仅能在数值上使用,本次自定义函数对模糊查找过程中的查找值,突破性地可以使用文本比较大小。

内容插图

内容插图

函数:CZYY查找引用INDEX

对于经典的INDEX+MATCH套路作查找引用交叉表数据,此次对其进行简化处理

更为直观地得到需要的结果,同时在查找数据中有大量重复数据时,此时多次重复值仅运算一次的优势再次出现,性能上可以有很大的提升。

内容插图

总结

对于函数的使用,本人一直坚持的理念是:一个函数处理一个场景,若不能单一的处理,尽量使用自定义函数的方式简化函数的逻辑。

不必追求过多的函数嵌套和各种复杂精妙技巧来完成。特别是需要交付给普通用户使用时,单个函数,清晰的参数指引输入,比各种复杂嵌套来得友好得多。

不是所有的牛奶都叫特仑舒,也不是所有的Excel使用者都需要学习那么复杂的函数使用,借助外力的二次开发自定义函数,掌握简单的IF和SUM函数的知识点,一样可以玩飞复杂的需求。