INDIRECT用不好,加班不要怪领导
小伙伴们好啊,今天咱们来学习一个比较有趣的函数——INDIRECT。
这个函数的作用,是将“具有引用样式的文本字符串,变成真正的引用”。
参数也非常简单:
INDIRECT(具有引用样式的字符串,[引用样式])
如果第二参数为TRUE或省略(包括参数值和逗号),会将第一参数中的字符串解释为A1样式的引用,如果第二参数为FALSE或是0,则将第一参数中的字符串解释为R1C1样式的引用。
具体啥是A1引用样式,啥是R1C1引用样式呢?
咱们日常使用的工作表里,默认就是A1引用样式,也就是用字母列标,用数字表示行号,两者组合到一起,来表示一个单元格的地址:
如果在Excel选项里选中了“R1C1”引用样式,工作表中的行号、列标就会都变成数值。此时使用“R行号C列号”的形式来表示一个单元格的地址:
接下来咱们先看看这个函数的引用过程。
如下图所示,B2单元格中是具有引用样式的字符“E3”,E3单元格中的内容是“我是E3”。
G3使用以下公式,返回结果为“我是E3”。
=INDIRECT(B2)
这个公式里,INDIRECT函数的参数是B2单元格,INDIRECT函数把B2单元格中带有引用样式的字符“E3”变成了E3单元格的实际引用,最终返回E3单元格里的内容。
再看下图中G3单元格中的公式:
=INDIRECT(\”E3\”)
这个公式里,INDIRECT函数的参数“E3”带有双引号,说明“E3”仅仅是一个文本字符串,而不是单元格地址,INDIRECT函数把带有引用样式的字符“E3”变成了E3单元格的实际引用,最终返回E3单元格里的内容。
接下来看一个多表汇总的实例。
如下图所示,有名为“十里河”、“饮马井”、“大洋路”和“方 庄”的几个工作表,现在要从“汇总”工作表里,汇总这几个工作表中的H列合计数。
在“多表汇总”工作表的C3单元格输入以下公式,下拉:
=SUM(INDIRECT(\”\’\”&B3&\”\’!H:H\”))
这个公式里,INDIRECT函数的参数看起来多了一些奇怪的符号,是什么意思呢?
这里面的参数以&为间隔,分成了三段:
\”\’\” 这部分是一对双引号,中间是一个单引号。其中的单引号就是咱们要得到的字符,一对双引号是在公式中输入字符串时,在字符串外面必须要加上的。
B3 表示B3单元格的地址。
\”\’!H:H\” 这部分外侧是一对双引号,表示双引号里面是字符串,中间的字符串是\’!H:H。
这三部分组合起来,就是带有单引号的工作表名称以及具体的单元格地址了。
咱们在编辑栏中选中 \”\’\”&B3&\”\’!H:H\” 这部分,按F9键看看,得到的字符串就是:\”\’十里河\’!H:H\”
在工作表名称前后各有一个单引号,是什么意思呢?
这是因为“方 庄”这个工作表名称里带有空格了,如果引用工作表名称中包含有空格等特殊符号或以数字开头时,就需要在公式中的工作表名前后加上一对半角单引号。而工作表名称中没有空格或特殊符号的,这对单引号加或不加都可以。
INDIRECT函数把字符串\”\’十里河\’!H:H\”变成实际的引用后,再使用SUM函数求和,OK了。
接下来咱们看看INDIRECT函数结合R1C1样式的用法。
如下图所示,要在汇总工作表中,汇总出几个明细表不同月份的总额。
首先来观察一下,在十里河等几个明细表里,1月份的数据在B列,2月份的数据在C列……
在汇总工作表里,C3单元格的公式可以写成这样,然后下拉:
=SUM(INDIRECT(\”\’\”&B3&\”\’!B:B\”))
这里是根据C列的店铺名称,来引用同名工作表B列的数据,然后使用SUM函数求和。
但是其他月份的汇总公式,就要把公式中的B:B分别改成C:C、D:D、E:E……才可以。
其实咱们可以在C3单元格输入下面这个公式,然后向下、向右拖动就可以了:
=SUM(INDIRECT(\”\’\”&$B3&\”\’!C[-1]\”,))
INDIRECT函数第二参数省略了参数值,仅使用一个逗号占位,表示将字符串解释为R1C1引用样式。
再看这一段字符串\”\’\”&$B3&\”\’!C[-1]\”最终是啥结果:
“十里河”是工作表名称,这个不用说了。
字符串里面的“C”,表示列,C[-1] 则表示公式所在列左侧一列的整列引用。
咱们让公式以自身所在列为参照,根据B列指定的工作表名称,始终引用这个工作表里,公式所在位置左侧的列。这样当公式向右复制时,就不需要改变表示列的参数了。
好了,关于INDIRECT函数的用法今天咱们就分享这么多,祝各位一天好心情!
图文制作:祝洪忠
函数INDIRECT详解
INDIRECT:返回文本字符串所指定的引用。
INDIRECT
如下图,“汇总表”中引用工作簿“第一季度”中工作表“2月”上的B2单元格,公式如下:
直接引用
上述公式中除了等号的部分可视为一个文本字符串,而这个字符串描述的是一个地址,这个地址指向某表格中的单元格。
把文本字符串作为INDIRECTD的第一参数:
同样实现了对目标单元格的引用。
INDIRECTD引用
对比两个公式可以看出:INDIRECT第一参数文本字符串格式应该与直接引用的格式相同。
格式相对固定,总结如下图。
记不住?完全没关系,需要的时候做个引用公式依葫芦画瓢即可。
INDIRECT第一参数格式
已知要引用单元格的详细地址,接下来就是要构建文本字符串。
可以用任何能想到的方式来构建文本字符串,只要满足固定格式。
把字符串拆得七零八碎,再用CONCAT拼装回来作为INDIRECT的参数:
INDIRECT连接字符作为INDIRECT参数
整个地址中工作簿放到单元格中,构建地址文本字符串时引用单元格,除此之外的字符文本手动输入并连接。最终的结果符合格式要求,也可作为INDIRECT的参数:
文本与引用构建INDIRECT第一参数字符串
目的:从“第一季度”中查找所有产品每个月的数据。
“第一季度”中三个工作表“1月”,“2月”,“3月”的A列和B列存放数据。
跨表案例
INDIRECT引用数据区域:
这里的关键是公式中引用B1单元格存放的工作表名称,后续填充公式时动态变化。
INDIRECT跨表应用
用VLOOKUP在引用回来的数据区域中查找产品的数据:
查找不到的返回错误值,可以用IFERROR进一步处理。
INDIRECT+VLOOKUP跨表查询数据
被引用数据的表格开启时公式正常工作,否则报错“无效的单元格引用”。
INDIRECT报错
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。