服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

VLOOKUP函数这个看似高级的用法我建议你千万别用~

日期: 来源:Excel星球收集编辑:EH看见星光
 戳蓝字“Excel星球”关注我哦。


HI,大家好,我是星光。


众所周知,使用Excel高效工作有四个必备的函数:

IF条件判断
VLOOKUP条件查询
SUMIF条件求和
COUNTIF条件计数

其中VLOOKUP函数对工作的帮助最大,既简单又实用,就得了个称号叫"大众情人"。



但该函数有一个强规则,查找值必须在查找范围的首列。如果遇到以下这种情况,它就不好用了。



如上图所示,需要根据A:C里的数据,查询E列人名所在的班级信息。


查询所需结果班级是A列,在查询依据列姓名是B列,结果列在查询列的左边,换句话说,查找值就没有在查找范围的首列。


这个时候,通常建议大家使用

INDEX+MATCH函数组合:


=INDEX(A:A,MATCH(E2,B:B,0)) 


如果你所使用的Excel版本是365,用XLOOKUP也挺好:


=XLOOKUP(E2,B:B,A:A) 


总之就不推荐使用VLOOKUP了。


有朋友说,拜托,这个问题VLOOKUP也能解决好不好?何必要用INDEX呢?F2单元格输入以下数组公式就可以了。


{=VLOOKUP(E2,IF({1,0},B:B,A:A),2,0)} 




打个响指,你要这么想,那我就不困了。



有很多函数老人家,特别喜欢给新人讲VLOOKUP函数{1,0}的用法,内心戏大概是这样的:是不是觉得这个用法很奇妙?是不是重新认识了VLOOKUP?嘿嘿嘿,我当年也是这么觉得,我当年……耸肩,摊手,不客气的说,这其实是一种PTSD后遗症。


VLOOKUP这种用法奇妙与否咱先不说,需要先说的是,无论编写体验,还是运算效率,这个用法都是渣的一匹。


编写方面,这家伙长度较其它解法更长,其中IF函数的第1参数还用到了数组,对新人而言,计算逻辑的理解就不大友好。另外,作为数组公式,普通Excel版本还需要按数组三键才能正确运行。


关键是运行效率是真渣,大碗宽面都装不下这么多渣。


它先用IF({1,0},B:B,A:A),构建了两列内存数组,第1列是B列,第2列是A列;也就将B列和A列整列调换了顺序,使查找值处在查找范围的首列。


此时,作为数组运算,它会计算整列数据,Excel一列有1048576个单元格,计算B列和A列,也就计算了1048576*2=200多万个单元格。


———这败家娘们爷们,即便是越南盾,单元格也不能这么花啊。


而如果使用公式:


=INDEX(A:A,MATCH(E2,B:B,0)) 


虽然也使用了整列的计算范围,但每个函数内部都是纯粹的单元格引用,不涉及数组运算,就会享有系统的两大能源补贴。



INDEX和MATCH函数会自动计算实际可用的单元格区域。依本例而言,虽然我们设置了MATCH函数的计算范围是B:B列,但实际上,它只会计算B列存在数据的区域,也就是B1:B9。这有些类似以下VBA语句:


Sub t()Intersect(Range("b:b"), ActiveSheet.UsedRange).SelectEnd Sub



2016版开始,微软对

VLOOKUP/HLOOKUP/MATCH

XLOOKUP等函数

运算机制进行了强力优化,从相同表区域查找多个列时,将为所搜索的列范围创建内部缓存索引,在后续查找中,将重用这一缓存的索引。


简单的说,如果你所使用的Excel版本是2016及以上,当你在其它单元格重复使用F2单元格的INDEX+MATCH函数时,它不会重复从单元格区域里读数据,而是直接从缓存中获取。


如此一来,即便是计算十几万行数据,只要你的Excel版本给力,也是可以高效完成的。


——这儿插句题外话,很多朋友一谈到Excel函数运行很卡顿,就说要换新电脑,这就很败家老爷们。打个响指,大哥,这事大可不必,咱们还是先升级下Excel版本再说,省下的钱给老婆大人买个新搓衣板不香了吗?



……


最后,综上所述,

还是推荐使用INDEX/XLOOKUP,

真别用VLOOKUP(IF({1,0}...)这种花里胡哨作用不大自残度却很高的技巧了。


没了,挥挥手说再见,没关注的朋友左上角点个关注,已关注的朋友右下角点个赞。更多系统性的表格知识和微信社群交流答疑等,也欢迎点击文末阅读原文加入我的Excel社群。

ʅ(´◔౪◔)ʃ


相关阅读

  • 感受 lambda 之美!

  • 点击上方 Java后端,选择 设为星标优质文章,及时送达来源:juejin.im/post/6844903849753329678一、引言java8最大的特性就是引入Lambda表达式,即函数式编程,可以将行为进行传递。
  • 系统调用与函数调用有什么区别?

  • 大家新年好,我是小风哥,这是今年的第一篇技术文,我们来聊聊系统调用与普通的函数调用之间的区别。作为程序员你肯定写过无数的函数,假设有这样两个函数:void funcB() {}void func
  • 深入理解Linux系统调用

  • 大家好,我是小风哥。在前两篇文章《为什么计算机需要操作系统》《系统调用与函数调用有什么区别》中我们了解了什么是系统调用、为什么需要系统调用、系统调用与函数调用有什
  • NDK开发之 JNI 静态注册与动态注册

  • 一、起因前段时间学习OpenGL ES相关技术,下载了一个Github项目学习,项目地址在:https://github.com/githubhaohao/NDK_OpenGLES_3_0项目的关键代码都是C++实现的,所以需要使用JN
  • Kotlin 高阶函数与 Standard.kt 源码详解

  • 前言在Kotlin中,高阶函数是指将一个函数作为另一个函数的参数或者返回值。如果用f(x)、g(x)用来表示两个函数,那么高阶函数可以表示为f(g(x))。Kotlin为开发者提供了丰富的高
  • Kotlin 协程能完全取代 RxJava 吗?

  • 作者:RainyJiang https://juejin.cn/post/7175803413232844855背景自从 jetbrains 公司提出 Kotlin 协程用来解决异步线程问题,并且衍生出来了 Flow 作为响应式框架,引来了大量
  • 厉害了,Kotlin 协程能完全取代 RxJava?

  • 安卓进阶涨薪训练营,让一部分人先进大厂大家好,我是皇叔,最近开了一个安卓进阶涨薪训练营,可以帮助大家突破技术&职场瓶颈,从而度过难关,进入心仪的公司。详情见文章:没错!皇叔开了
  • Android-Native 开发之利用 AAudio 播放音频

  • 前言谈到在Android C/C++层实现音频播放/录制功能的时候,大家可能首先会想到的是利用opensles去做,这确实是一直不错的实现方式,久经考验,并且适配比较广。但如果你的项目最低版

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 资金新常态

  • 好久不见,柴友们!交易员小肥柴终于想起来它还有个沉睡了许久的公众号,记得它上次更新还是在上次。最近债市新闻里资金面频频“上热搜”,今天除了下午2点多的股债异常波动,尾盘15%
  • 实力拆解抖音美食账号变现玩法!

  • 相信不少深夜刷抖音的朋友,或者是经常刷抖音的小伙伴,应该都知道,抖音上能刷到不少美食视频,拍得那叫一个好啊。仿佛隔着屏幕都能够闻到食物的香味了。那么不少朋友会好奇这一类
  • 2022年普通人的赚钱之道:轻资产创业!

  • 什么是轻资产创业?相信大多数人都知道。可以理解为:不需要大量资金的投入和大量的劳动成本,更不需要有实体店,囤货等高成本投入。也许,有些小白会问:好像什么都不需要投入似的,这样
  • 抖音小店陪跑实战训练营第16期!

  • 人生在世,就为追逐每一个梦想而努力生活着。梦想虽多,但是有一个梦想,却是每个人毕生追求的。那就是赚钱!虽然人生短短几十年,有很多更有意思的事情要做去。但是,赚钱仍然是人生的