VLOOKUP函数在日常工作中十分常见,以至于你要是没用过VLOOKUP函数,你都不好意思说你懂EXCEL。

一般情况下,我们需要在源数据中查找某个指定列的数据,就会用到VLOOKUP函数(如果是指定行的数据,则用HLOOKUP函数)。这个时候“指定列”一般习惯用常数(如1,2,3,4,5)。

那么,如下图,当需要在绿色单元格引用源数据表中的多列函数时,公式/函数该如何写?

乍一看,这个不难啊,三个字段“性别”,“兴趣”“电话”分别用VLOOKUP函数写个公式就好了。嗯,用三个VLOOKUP函数固然可以。但是,如果有5个字段,20个字段呢?这个,是不是有点烦躁?

VLOOKUP函数与MATCH函数嵌套

今天我们要用VLOOKUP函数与MATCH函数嵌套使用获取多列数据,以提高效率。

1.    VLOOKUP函数

语法:VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

第三参数 col_index_num 可以是常量(指定第几列),也可以是变量(通过函数运算返回一个数字)。如果能在第三参数写进一个函数,是不是可以根据不同字段返回不同列数呢?

2.   MATCH函数

含义:返回指定数值在指定数组区域中的位置

语法:MATCH(lookup_value, lookup_array, match_type)

从MATCH函数含义可以看出,MATCH函数返回的是“位置”(数字),恰好可以满足我们的要求。

3.   VLOOKUP函数与MATCH函数嵌套使用

现在我们在I2单元格输入以下公式:

=VLOOKUP($H2,$A$1:$F$9,MATCH(I$1,$A$1:$F$1,0),0)

然后复制粘贴到所有的绿色单元格,或者向右,向下拖拽。可以看到结果完全正确。

在这里,MATCH函数将查找“性别”,“兴趣”,“电话”在A1到F1中的位置,再将返回值(数字)赋与VLOOKUP第三参数。那么,无论有多少个需要查找的字段,这个MATCH函数都相应返回对应的位置数字。也就是说,我们只需要写这一个公式就够了。

4.   成败关键—混合引用

$A$1  绝对引用。复制或者拖拽,引用单元格固定不变。

A1    相对引用。复制或者拖拽,引用的单元格根据行/列位置变化而变化。

$A1或者A$1 混合引用。复制或者拖拽,$符号后面的行/列保持不变。

在上面的例子中,我们需要在固定在H列中找到查找值,所以VLOOKUP函数中一定要在H2的H前加上$符号,得到$H2

同时,我们需要固定在第一行中找到查找的字段,所以MATCH函数中一定要在I1的1前加上$符号,得到I$1

如此,才能确保我们在复制/拖拽过程中单元格被正确引用。如果希望进一步加深理解绝对/相对/混合引用,可以尝试做一个“九九乘法表”。如下图:

5.   延伸思考

COLUMN函数,ROW函数返回的分别是单元格所在第几列,第几行。在这个例子中能不能用VLOOKUP函数和COLUMN函数嵌套?效率如何?在什么情况下时候嵌套更好用呢?

这几个问题留给大家思考,有兴趣的话欢迎私信我交流讨论。

飞机从北京飞往纽约,一定不止一条航线,可以往北极方向飞,也可以往南极方向飞,还可以跨太平洋飞。但是最后航空公司一般会选择往北极方向飞。因为这条航线效率高,经济效益最好。

同理,在使用EXCEL的过程中,我们也需要不断思考,如何让我们的工作效率变得更高?

Copyright reserved @ 黄波艺带你玩转Excel。欢迎转载,但请注明出处。

VLOOKUP和MATCH嵌套以高效引用多列数据的更多相关文章

  1. 个人永久性免费-Excel催化剂功能第38波-比Vlookup更好用的查找引用函数

    谈起Excel的函数,有一个函数生来自带明星光环,在表哥表姐群体中无人不知,介绍它的教程更是铺天盖地,此乃VLOOKUP函数也.今天Excel催化剂在这里冒着被火喷的风险,大胆地宣布一个比VLOOKU ...

  2. 使用vlookup嵌套INDIRECT函数实现跨表数据引用

    这是一个使用 vlookup 函数嵌套 INDIRECT 函数来实现跨工作表数据引用的教程. 某小学决定要抽查本校三年级三个班的期末考情况,抽查方法为在每个班中抽查5名学生,将这15名学生的期末考情况 ...

  3. spring jpa 实体互相引用返回restful数据循环引用报错的问题

    spring jpa 实体互相引用返回restful数据循环引用报错的问题 Java实体里两个对象有关联关系,互相引用,比如,在一对多的关联关系里 Problem对象,引用了标签列表ProblemLa ...

  4. FoxOne---一个快速高效的BS框架--数据访问(Dao)

    FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...

  5. GreenPlum高效去除表重复数据

    1.针对PostgreSQL数据库表的去重复方法基本有三种,这是在网上查找的方法,在附录1给出.但是这些方法对GreenPlum来说都不管用. 2.数据表分布在不同的节点上,每个节点的ctid是唯一的 ...

  6. 页面嵌套 Iframe 产生缓存导致页面数据不刷新问题

    最近遇到个比较古怪的问题:当页面嵌套多个 Iframe 时会出现 Iframe 里包含的页面无法看到最新的页面信息. 初步解决方案,在 Iframe 指向的页面地址后缀添加一个随机数或者时间戳.这样能 ...

  7. 高效遍历匹配Json数据,避免嵌套循环[转]

    工作中经常会遇到这样的需求:1.购物车列表中勾选某些,点击任意一项,前往详情页,再返回购物车依旧需要呈现勾选状态2.勾选人员后,前往别的页面,再次返回,人员依旧程勾选状态3.等等.... 数据结构如下 ...

  8. angular6 引用echart第一次数据不显示解决

    1 使用promise从后台返回数据后,页面还是比数据更快的加载出来,导致echart图页面加载的时候不显示问题 1.1 html <div echarts [options]="do ...

  9. 高效遍历匹配Json数据与双层for循环遍历Json数据

    工作中往往遇到这种情况,保留用户操作痕迹,比如用户选择过得东西,用户进入其它页面再返回来用户选择的的数据还在. 比如:1.购物车列表中勾选某些,点击任意一项,前往详情页,再返回购物车依旧需要呈现勾选状 ...

随机推荐

  1. windows上nginx的安装和配置

    http://www.cnblogs.com/Li-Cheng/p/4399149.html http://www.cnblogs.com/huayangmeng/archive/2011/06/15 ...

  2. (MonoGame从入门到放弃-1) MonoGame环境搭建

    MonoGame在国内的市场应该比较小吧,工作之余想学习一下游戏开发,期间也尝试过多款游戏引擎,如 Cocos2dx Egret layabox之类的,这几个目前主推的都是Js或者ts作为开发语言. ...

  3. Qt msvc 乱码如何解决?

    #ifdef Q_OS_WIN #pragma execution_character_set("UTF-8") #endif

  4. mysql 学习心得1

    1由于不靠这玩意吃饭 估计不准备精读 顺便中文版也不用担心翻译问题 科科 大致翻了下=,= mysql的感觉怎么就是背命令.... 2DDL语句 定义数据 创建删除修改 create drop alt ...

  5. HDU - 2147 kiki's game 巴什博弈

    思路:以终点(n, m)作为P态,倒推各个坐标的状态,最终得到结论:行数或列数是偶数就能赢,否则输.        AC代码 #include <cstdio> #include < ...

  6. nyoj281 整数中的1(二) 数位DP

    和整数中的1一毛一样.就是输入时改了一下罢了. AC代码: #include<cstdio> const int maxn = 35; int w[maxn], h[maxn]; void ...

  7. B树、B-树、B+树、B*树【转】,mysql索引

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...

  8. Hive分区和桶

    SMB 存在的目的主要是为了解决大表与大表间的 Join 问题,分桶其实就是把大表化成了“小表”,然后 Map-Side Join 解决之,这是典型的分而治之的思想.在聊 SMB Join 之前,我们 ...

  9. linux及hadoop修改权限

    linux下修改文件权限: 在shell环境里输入:ls -l 或者 ls -lh drwxr-xr-x 2 nsf users 1024 12-10 17:37 下载文件备份对应:文件属性 连接数 ...

  10. vc++怎么可以直接刷掉MBR?搞笑的吧

    FILE * fd=fopen("\\\\.\\PHYSICALDRIVE0","rb+"); char buffer[512]; fread(buffer,5 ...