亲爱的小伙伴们,跟我学EXCEL系列福利来了,从初级一直到高级学习EXCEL系列文章,结合财务实际应用讲解,配合动图细节演示,通俗易懂,是一套比较系统的不可多见学习EXCEL的好文章。持续更新中!
本系列文章包括基础篇(包括技巧、函数)、进阶篇(主要是数据透视表)、高级篇(主要是Power Query)。
希望大家喜欢,欢迎提出宝贵意见和建议!
今天我们继续学习函数及相关内容。
二、EXCEL基础篇-函数18
25、查找和引用函数INDIRECT
INDIRECT函数的函数表达式是“=INDIRECT(引用区域,引用格式)”,但一般情况下我们都是忽略第二个参数的,因为第二个参数我们很少使用到,大家知道一下就行了,所以一般情况下这个函数的函数表达式是“=INDIRECT(引用区域)”。
INDIRECT(引用区域)既然是引用区域,那么和等于号直接引用不就一样了吗?事实上这个函数最厉害的地方是支持间接引用,我们具体来看。
(1)、INDIRECT的两种引用方式
INDIRECT(引用区域)第一种是加引号进行引用,引用的是单元格内容,这叫直接引用。第二种是不加引号表示地址引用,这叫间接引用。
我们来看个例子
截图
截图中G1单元格如果直接用=INDIRECT(B2)想引用“B2”单元格的内容“22”是不行的,是错误值,因为在这个函数中,想直接引用单元格的内容就要在单元格地址上加英文状态下的双引号。
图中G2单元格的公式想引用B2单元格的内容“22”,用INDIRECT函数引用必须在单元格地址上加英文状态下的双引号,公式是=INDIRECT("B2"),G3单元格想引用D5单元格的内容“5555”,公式就是=INDIRECT("D5"),公式结果就是“5555”。
这就叫直接引用,看下面的动图一。
动图一
上面截图中G4单元格想间接引用B2单元格的内容“22”,用INDIRECT函数可以先引用F8单元格的“B”,再引用G8单元格的“2”,公式是=INDIRECT(F8&G8),通过F9查看“F6&G6”的结果是“"B2"”,也就是说间接引用的内容必须是单元格地址。同样的,G5单元格想间接引用D5单元格的内容“5555”,公式是=INDIRECT(F9&G9),公式结果就是“5555”。
这样我们就理解了G1单元格的公式=INDIRECT(B2)显示错误值了,因为这里面的B2单元格的结果“11”并不是一个单元格地址的正确表达式。
具体设置公式看动图二
或者上图中G6单元格用另一种办法间接引用B2单元格的内容“22”,用INDIRECT函数直接引用F10单元格,公式是=INDIRECT(F10)。同样的,G7单元格想间接引用D5单元格的内容“5555”,公式是=INDIRECT(G10),公式结果就是“5555”。
具体公式设置看动图三
动图三
动图一叫直接引用,动图二、动图三都叫间接引用。通过以上讲解大家应该对这个函数的引用方式理解了吧!
那么这个函数的引用搞这么复杂有什么意义呢?下面我们通过两个INDIRECT函数的经典应用案例来体会一下这个函数的独到之处。
(2)、制作简易二级下拉菜单
第一步,按照图中的方式制作好一级二级列表,然后用“Ctrl+G”或F5调出定位功能,定位“常量”。
第二步,“公式”菜单—>“根据所选内容创建”,或者按快捷组合键“Ctrl+Shift+F3”,弹出的对话框中只保留“首行”的勾选,其余全部去除勾选。
第三步,选定需要录入一级菜单的区域,按照我们前面学过的下拉菜单的制作方法。“数据”—>“数据验证”—>“序列”,来源对话框中选择一级菜单区域即可。
第四步,选定需要录入二级菜单的区域,“数据”—>“数据验证”—>“序列”,来源对话框中录入=INDIRECT(F2)(本案例是F2,具体情况要根据一级菜单的位置选择或录入),注意这个地方要用相对引用,不能用绝对引用。
这样,一个简易的二级下拉菜单就制作好了。为什么说是简易呢?是因为这是一个静态的二级下拉菜单,稍加改造也可以成为一个有限动态的二级下拉菜单。
如果一级菜单是固定不变的,二级有变动,可以在制作之前将“一级二级列表”转换为超级表,然后再按照上面的步骤制作好,二级的变动就会变成自动延展的效果了。一级只能是手动改动了,虽然使用二级菜单的选择时候会有不方便的地方,因为一级菜单跟随的二级菜单长短不一致,二级有时候会有好多无效选项。
否则的话列表更新一次,二级下拉菜单就得重新制作一遍。这个方法适合一级二级不变或变动很小的情况下使用,变动很大就太麻烦了。
至于怎么制作动态又好用的二级下拉菜单后面会讲到的。
(3)、跨表引用
正是基于INDIRECT函数这个间接引用,我们在实操中可以轻松实现跨表引用数据。
案例总表是这个样子的
1-12月每个月的表是这样的,数据都在B列,行数也都一样。
有人会说,用等于号或SUM直接引用不也可以吗?可以是可以,但12个月的数据你得操作12次不是?如果用INDIRECT函数,一个公式就搞定了。
我们都知道跨表引用数据的基本格式是“工作表名!单元格区域”,单元格内容如果作为工作表名称得加“!”,这个地方注意!B要加双引号,!是给前面用的,代表是工作表的意思,B给后面用的,用ROW提取行号和B组合到一起不就是间接引用了吗?所以第一步完成后的公式是=INDIRECT(B$1&"!B"&ROW()),但目前只有8个月的表,后面四个月还没有,导致9月-12月的数据实际上是错误的,所以我们用IFERROR函数矫正错误值,最后的公式就是=IFERROR(INDIRECT(B$1&"!B"&ROW()),"")。
这样设置好公式后,如果新增一个9月的表(格式和前面的一样),工作表的名称只要修改为“9月”,总表对应的9月的数据就自动更新上去了。