Indirect函数最最重要的两种用法都在这里了
indirect:间接地。
在excel中,该函数也以它实际的运行方式向我们诠释着“间接地”这一层意思。
INDIRECT函数的作用及语法:
作用:
返回由文本字符串指定的引用。此函数立即对引用进行计算,并显示其内容。当需要更改公式中单元格的引用,而不更改公式本身,请使用函数 INDIRECT。
如何去理解这个拗口的“官腔”?
如果一个文本S它显示的是另一个单元格的地址(这个地址可以是单元格的引用各类样式如:A1,R1C1;也可以是名称管理器中的代表一个单元格区域的名称),那么在使用indirect函数来计算这个文本S(即在单元格中输入=indirect(S))的时候,其结果并不是这个S,而是S所表示的单元格。
下面以动图协助理解。
某一天,需求发生了改变,我们需要显示的D5的内容,但是我们又不想改公式(即C9中的=indirect(A5)不动),我们只需要把A5这个单元格的值改成D5就可以了。
语法:
INDIRECT(Ref_text[,A1])
/*
Ref_text:为表达单元格的引用的文本或者单元格:
此参数可以是如下几种:
1、A1-样式的引用(如:A1、C2之类的)、R1C1-样式的引用(如R1C1、R2C3之类的)
2、定义为引用的名称(名称管理器中所定义的名称)
3、文本字符串单元格的引用如indirect("A1")
注意:
■ 如果 ref_text 不是合法的单元格的引用,函数 INDIRECT 返回错误值 #REF!。
■ 如果 ref_text 是对另一个工作簿的引用(外部引用),则那个工作簿必须被打开。
如果源工作簿没有打开,函数 INDIRECT 返回错误值 #REF!。
A1 可选参数。逻辑值,指明包含在单元格 ref_text 中的引用的类型。
■ 如果 A1 为 TRUE 或省略,ref_text 被解释为 A1-样式的引用(如:A1、C2之类的)。
■ 如果 A1 为 FALSE,ref_text 被解释为 R1C1-样式的引用(如R1C1、R2C3之类的)。
*/
这个函数的实际应用示例:
1、多级联动的下拉菜单
在此做一个三级联动的下拉菜单的动图:如何去做多级联动的下拉菜单我们下一期将详细讲解。
2、数据引用:跨表引用、跨工作簿引用
跨表引用数据:
我这里准备了四张表,汇总表中的数据为汇总数据,sheet3~sheet5各表表示每个期间的相关数据:汇总表中的数据,小编已经通过公式列出来了。
利用indirect函数做跨表引用动态图:
对以上跨表引用的公式设计:
1、观察这几个表的表结构:发现前二列结果一样,第三列除了表头有所不同之外,都一样。
因此:我们把姓名列:B2:B16列的引用区域文本“B2:B16”这个文本放置于H3单元格,将Sheet3~Sheet5各表中代表成绩的列C2:C16的引用区域文本“B2:B16”诉置于I3单元格,并且这几列是固定位置不动的;我们将代表Sheet3~Sheet5的工作表名称分别放置在G2、H2、I2三个单元格中。
2、跨工作表引用的格式为"工作表名!单元格区域"。
3、因此小编就开始计划使用xlookup函数进行查找各学生的期中、期末以及平均成绩了
=XLOOKUP(INDIRECT($H$3),INDIRECT(G2&$H$3),INDIRECT(G2&$I$3),"无分数",0,1)
/*
INDIRECT($H$3):表示当前“汇总表”H3单元内容所指区域的间接引用,即实际引用的是成绩表中的姓名列B2:B16
G2&$H$3和G2&$I$3:即是要将字符串拼接成跨表引用的格式:“工作表名!单元格区域”如第2条的图所示
INDIRECT(G2&$H$3),INDIRECT(G2&$I$3):这两个即是对G2单格中所示的工作表:Sheet3表中的姓名列、成绩列
的间接引用
*/
跨工作簿引用数据:用法同跨表引用,但是唯一不同的是因为是indirect引用,所以需要将被引用的工作簿打开,不然无法使用indirect函数。
但是如果不想打开被引用的工作簿,那么就应该更换其他公式,具体用法可以参考我的另一篇文章《跨工作薄引用数据必需打开引用工作薄?不需要!根本不需要!》