Table of contents
这个Excel INDIRECT教程解释了该函数的语法、基本用途,并提供了一些公式实例,演示了如何在Excel中使用INDIRECT。
微软Excel中存在大量的函数,有些容易理解,有些则需要长时间的学习,而前者的使用频率高于后者。 然而,Excel INDIRECT就是其中之一。 这个Excel函数不进行任何计算,也不评估任何条件或逻辑测试。
那么,Excel中的INDIRECT函数是什么? 这是一个非常好的问题,希望你在读完本教程后,几分钟内能得到一个全面的答案。
Excel INDIRECT函数--语法和基本用途
顾名思义,Excel INDIRECT用于间接引用单元格、区域、其他工作表或工作簿。 换句话说,INDIRECT函数让你创建一个动态的单元格或区域引用,而不是硬编码。 因此,你可以改变公式中的引用而不改变公式本身。 此外,这些间接引用不会在一些新的行或列发生变化在工作表中插入或删除任何现有的工作表时。
所有这些可能从一个例子中更容易理解。 然而,为了能够写出一个公式,即使是最简单的公式,你也需要知道函数的参数,对吗? 所以,让我们先快速了解一下Excel INDIRECT语法。
INDIRECT函数语法
Excel中的INDIRECT函数从一个文本字符串中返回一个单元格引用。 它有两个参数,第一个是必需的,第二个是可选的。
INDIRECT(ref_text, [a1])参考文献 - 是一个单元格引用,或一个文本字符串形式的单元格引用,或一个命名范围。
a1 - 是一个逻辑值,用于指定 ref_text 参数中包含的引用类型。
- 如果是TRUE或省略,ref_text被解释为A1风格的单元格引用。
- 如果是FALSE,Ref_text被视为R1C1的引用。
虽然R1C1引用类型在某些情况下可能很有用,但你可能想在大多数时候使用熟悉的A1引用。 总之,本教程中几乎所有的INDIRECT公式都将使用A1引用,所以我们将省略第二个参数。
INDIRECT函数的基本使用
为了深入了解这个函数的内涵,让我们写一个简单的公式,演示一下如何在Excel中使用INDIRECT。
假设,你在A1单元格有数字3,而文本 A1 现在,在C1单元格中输入公式 =INDIRECT(C1)
在任何其他单元格,看看会发生什么。
- INDIRECT函数指的是C1单元格中的值,也就是A1。
- 该函数被送到A1单元格,在那里它选择了要返回的值,也就是数字3。
因此,在这个例子中,INDIRECT函数的实际作用是 将一个文本字符串转换为一个单元格引用 .
如果你认为这仍然没有什么实际意义,请忍耐一下,我将向你展示更多的公式,揭示Excel INDIRECT函数的真正力量。
如何在Excel中使用INDIRECT--公式示例
正如上面的例子所展示的,你可以使用Excel INDIRECT函数将一个单元格的地址作为一个普通的文本字符串放到另一个单元格中,并通过引用第二个单元格获得第一个单元格的值。 然而,这个微不足道的例子不过是对INDIRECT功能的一个提示。
在处理真实数据时,INDIRECT函数可以将任何文本字符串变成一个引用,包括你用其他单元格的值和其他Excel公式返回的结果建立的非常复杂的字符串。 但是,我们不要本末倒置,要逐一运行几个Excel间接公式。
从单元格值创建间接引用
正如你所记得的,Excel的INDIRECT函数允许A1和R1C1的引用样式。 通常,你不能在一个工作表中同时使用这两种样式,你只能通过以下方式在两种引用类型之间切换 文件> 选项> 公式 > R1C1复选框 这就是为什么Excel用户很少考虑使用R1C1作为替代参考方法的原因。
在INDIRECT公式中,如果你愿意,你可以在同一张表上使用任何一种参考类型。 在我们进一步行动之前,你可能想知道A1和R1C1参考类型之间的区别。
A1风格 是Excel中常用的引用类型,指的是一列后面的行号。 例如,B2指的是B列和第2行交汇处的单元。
R1C1风格 是相反的参考类型--行后是列,这确实需要一些时间来适应:)例如,R4C1指的是工作表中第4行第1列的A4单元格。 如果字母后面没有数字,那么你指的是同一行或同一列。
现在,让我们看看INDIRECT函数如何处理A1和R1C1引用。
正如你在上面的截图中所看到的,三个不同的间接公式返回相同的结果。 你已经知道为什么了吗? 我打赌你已经知道了 : )
- D1单元格中的公式。
=INDIRECT(C1)
这是最简单的一个。 该公式指的是C1单元格,获取其值--文本字符串 A2 将其转换为单元格引用,前往A2单元格并返回其值,即222。
- D3单元格中的公式。
=indirect(c3,false)
第2个参数中的FALSE表示参考值(C3)应被视为R1C1单元格的引用,即一个行号和一个列号。 因此,我们的INDIRECT公式将C3单元格中的值(R2C1)解释为对第2行和第1列的连接单元格的引用,也就是A2单元格。
从单元格值和文本创建间接引用
与我们从单元格值创建引用的方式类似,你可以将一个 文字串 和一个 单元参考 在你的INDIRECT公式中,用连接运算符(&)连接起来。
在下面的例子中,公式:=INDIRECT("B"&C2)根据以下逻辑链从B2单元格返回一个值。
INDIRECT函数将Ref_text参数中的元素连接起来,即text B 和单元格C2中的值->;单元格C2中的值是数字2,这就对单元格B2进行了引用->;公式进入单元格B2并返回其值,即数字10。
用命名的范围使用INDIRECT函数
除了从单元格和文本值中进行引用外,你可以让Excel的INDIRECT函数来引用 命名的范围 .
假设,你的工作表中有以下命名的范围。
- 苹果 - B2:B6
- 香蕉 - C2:C6
- 柠檬 - D2:D6
要创建一个Excel动态引用到上述任何一个命名的范围,只需在某个单元格中输入其名称,例如G1,并通过间接公式引用该单元格即可 =INDIRECT(G1)
.
现在,你可以更进一步,将这个INDIRECT公式嵌入到其他Excel函数中,以计算给定命名范围内的数值的总和和平均数,或找到范围内的最大/最小值。
=sum(间接(g1))
=平均数(间接(g1))
=max(间接(g1))
=min(间接(g1))
现在你已经对如何在Excel中使用INDIRECT函数有了大致的了解,我们可以尝试使用更强大的公式。
用INDIRECT公式动态引用另一个工作表
Excel INDIRECT函数的用处不仅限于建立 "动态 "单元格引用,你还可以利用它来 "即时 "引用其他工作表中的单元格,下面就是方法。
假设,你在工作表1中有一些重要的数据,你想把这些数据拉到工作表2中,下面的截图演示了Excel间接公式如何处理这一任务。
让我们把你在截图中看到的公式拆开来理解。
如你所知,在Excel中引用另一个工作表的通常方法是写下工作表的名称,后面是感叹号和一个单元格/区域的引用,如 工作表名称!范围 由于工作表的名称经常包含一个或多个空格,你最好用单引号把它(名称,而不是空格:)括起来,以防止出现错误,例如 '我的床单!'$A$1 .
现在,你要做的就是在一个单元格中输入工作表名称,在另一个单元格中输入单元格地址,将它们连接成一个文本字符串,并将该字符串送入INDIRECT函数。 记住,在一个文本字符串中,你必须用双引号将单元格地址或数字以外的每个元素括起来,并使用连接运算符(&)将所有元素连接起来。
鉴于上述情况,我们得到以下模式。
INDIRECT("'" & 床单的名称 & "'!" & 从细胞中提取数据 )回到我们的例子,你把工作表的名称放在A1单元格,并在B列输入单元格地址,如上面的截图所示。 结果,你得到以下公式。
INDIRECT("'" & $A$1 & "'!" & B1)
另外,请注意,如果你将公式复制到多个单元格,你必须使用绝对的单元格引用来锁定工作表的名称,如$A$1。
笔记
- 如果包含第2张表的名称和单元格地址的任何一个单元格(上述公式中的A1和B1)是空的,你的间接公式将返回一个错误。 为了防止这种情况,你可以将INDIRECT函数包裹在IF函数中。
IF(OR($A$1="",B1=""), "", INDIRECT("'" & $A$1 & "'!" & B1)
- 为了使引用另一个工作表的INDIRECT公式正常工作,被引用的工作表应该是打开的,否则公式将返回#REF错误。 为了避免错误,你可以使用IFERROR函数,无论发生什么错误,它都将显示一个空字符串。
IFERROR(INDIRECT("'" & $A$1 & "'!" & B1), "")
创建一个Excel动态引用到另一个工作簿
指向不同的Excel工作簿的间接公式与指向另一个电子表格的方法相同。 你只需要在工作表名称和单元格地址之外指定工作簿的名称。
为了方便起见,让我们先以通常的方式引用另一本书(在你的书和/或表的名字包含空格的情况下,会加上撇号)。
'[Book_name.xlsx]Sheet_name'!范围
假设书名在A2单元格,工作表名在B2,单元格地址在C2,我们得到以下公式。
=INDIRECT("'[" & $A$2 & "] & $B$2 & "'!" & C2)
由于你不希望在将公式复制到其他单元格时,包含书名和工作表名的单元格发生变化,所以你通过使用绝对单元格引用来锁定它们,分别是$A$2和$B$2。
而现在,你可以通过使用下面的模式,轻松写出你自己对另一个Excel工作簿的动态引用。
=INDIRECT("'[" & 书名 & "]" & 纸张名称 & "'!" & 小区地址 )注意:你的公式所指向的工作簿应该始终是打开的,否则INDIRECT函数将抛出一个#REF错误。 像往常一样,IFERROR函数可以帮助你避免它。
=IFERROR(INDIRECT("'[" & A2 & "]" & $A$1 & "'!" & B1), "")
使用Excel INDIRECT函数锁定单元格引用
通常情况下,当你在工作表中插入新的或删除现有的行或列时,Microsoft Excel会改变单元格引用。 为了防止这种情况发生,你可以使用INDIRECT函数来处理在任何情况下都应该保持不变的单元格引用。
为了说明其中的差别,请做以下工作。
- 在任何单元格中输入任何数值,例如,在A1单元格中输入数字20。
- 从其他两个单元格以不同的方式引用A1。
=A1
和=indirect("a1")
- 在第1行上方插入一个新行。
看看会发生什么? 等于 逻辑运算符仍然返回20,因为它的公式已经自动改为=A2。 带有INDIRECT公式的单元格现在返回0,因为在插入新行时公式没有改变,它仍然指的是A1单元格,目前是空的。
经过这个演示,你可能会觉得INDIRECT函数是个麻烦,而不是帮助。 好吧,让我们试试另一种方法。
假设,你想对A2:A5单元格中的数值进行求和,你可以用SUM函数轻松做到这一点。
=SUM(A2:A5)
然而,你想让公式保持不变,无论删除或插入多少行。 最明显的解决方案--使用绝对引用--不会有帮助。 为了确保这一点,输入公式 =sum($a$2:$a$5)
在某个单元格中,插入一个新的行,比如在第3行,然后......找到转换为公式的 =sum($a$2:$a$6)
.
当然,在大多数情况下,微软Excel的这种礼遇是很好的。 然而,在某些情况下,你可能不希望公式被自动改变。 解决方案是使用INDIRECT函数,像这样。
=sum(间接("a2:a5"))
由于Excel认为 "A1:A5 "仅仅是一个文本字符串,而不是一个范围参考,所以当你插入或删除某一行时,它不会做任何改变。
与其他Excel函数一起使用INDIRECT
除了SUM之外,INDIRECT还经常与其他Excel函数一起使用,如ROW、COLUMN、ADDRESS、VLOOKUP、SUMIF等等。
例1.INDIRECT和ROW函数
很多时候,ROW函数在Excel中被用来返回一个数组的值。 例如,你可以使用下面的数组公式(记住它需要按Ctrl + Shift + Enter )来返回A1:A10范围内3个最小数字的平均值。
=average(small(a1:a10,row(1:3)))
然而,如果你在工作表中插入一个新的行,在第1行和第3行之间的任何地方,ROW函数中的范围将被改变为ROW(1:4),公式将返回4个最小数字的平均值,而不是3个。
为了防止这种情况发生,在ROW函数中嵌套INDIRECT,无论插入或删除多少行,你的数组公式将始终保持正确。
=average(small(a1:a10,row(间接("1:3")))))
这里还有几个结合LARGE函数使用INDIRECT和ROW的例子:如何对一个范围内的N个最大数字求和。
例2.INDIRECT和ADDRESS函数
你可以使用Excel的INDIRECT和ADDRESS函数来获取某个单元格中的值。
你可能还记得,ADDRESS函数在Excel中用于通过行号和列号获得单元格地址。 例如,公式为 =ADDRESS(1,3)
返回字符串$C$1,因为C1是第1行和第3列的交叉点上的单元格。
要创建一个间接的单元格引用,你只需将ADDRESS函数嵌入一个INDIRECT公式中,像这样。
=indirect(address(1,3))
当然,这个微不足道的公式只是演示了这个技术。 而这里有几个例子,可能会证明真的很有用。
- INDIRECT ADDRESS公式 - 如何切换行和列。
- VLOOKUP和INDIRECT--如何动态地从不同的工作表中提取数据。
- INDIRECT与INDEX/MATCH--如何将一个对大小写敏感的VLOOKUP公式做到完美。
- Excel INDIRECT和COUNTIF--如何在非连续区域或选定的单元格上使用COUNTIF函数。
在Excel中使用INDIRECT进行数据验证
你可以使用Excel INDIRECT函数和数据验证来创建层叠式下拉列表,根据用户在第一个下拉列表中选择的值来显示不同的选择。
一个简单的依赖性下拉列表真的很容易制作。 它所需要的只是一些命名的范围来存储下拉的项目和一个简单的 =INDIRECT(A2)
公式,其中A2是显示第一个下拉列表的单元格。
要制作更复杂的3级菜单或带有多字词条的下拉菜单,你将需要一个更复杂的INDIRECT公式和一个嵌套的SUBSTITUTE函数。
关于如何在Excel数据验证中使用INDIRECT的详细步骤指导,请查看本教程:如何在Excel中制作一个依赖性下拉列表。
Excel INDIRECT函数--可能的错误和问题
正如上面的例子所展示的,INDIRECT函数在处理单元格和区域引用时相当有帮助。 然而,并不是所有的Excel用户都热衷于接受它,主要是因为在Excel公式中大量使用INDIRECT导致缺乏透明度。 INDIRECT函数很难审查,因为它所指的单元格并不是公式中所用数值的最终位置。这确实很让人困惑,尤其是在处理大型复杂公式的时候。
除了上面所说的,像其他Excel函数一样,如果你误用了函数的参数,INDIRECT可能会抛出一个错误。 下面是一个最典型的错误列表。
Excel INDIRECT #REF!错误
大多数情况下,INDIRECT函数在三种情况下返回#REF!错误。
- ref_text不是一个有效的单元格引用 如果你的间接公式中的ref_text参数不是一个有效的单元格引用,该公式将导致#REF!错误值。 为了避免可能出现的问题,请检查INDIRECT函数的参数。
- 超过了范围限制 如果你的间接公式的ref_text参数指向的单元格范围超过了1,048,576的行限制或16,384的列限制,你也会在Excel 2007、2010和Excel 2013中得到#REF错误。 早期的Excel版本会忽略超过的限制,并且确实返回一些值,尽管往往不是你所期望的。
- 被提及的工作表或工作簿被关闭。 如果你的间接公式指的是另一个Excel工作簿或工作表,那另一个工作簿/工作表必须打开,否则INDIRECT返回#REF!错误。
Excel INDIRECT #NAME? 错误
这是最明显的情况,意味着函数的名称有一些错误,这就导致了我们的下一个问题: )
在非英语地区使用INDIRECT函数
你可能很想知道,INDIRECT函数的英文名称已被翻译成14种语言,包括。
|
|
如果你有兴趣获得完整的名单,请查看这个页面。
非英语本地化的一个常见问题不是INDIRECT函数的名称,而是不同的 区域设置 为 列表分离器 在北美和其他一些国家的标准Windows配置中,默认为 列表分离器 逗号。 而在欧洲国家,逗号被保留为 小数点符号 和 列表分离器 被设置为分号。
因此,当在两个不同的Excel区域之间复制公式时,你可能会得到错误信息" 我们发现这个公式有一个问题... "因为 列表分离器 如果你在将本教程中的一些INDIRECT公式复制到Excel中时遇到这个错误,只需将所有逗号(,)替换为分号(;)即可解决。
要检查你的机器上设置了哪些列表分隔符和小数点符号,请打开 控制面板 ,并转到 地区和语言> 其他设置 .
希望本教程对在Excel中使用INDIRECT有所启发。 现在你知道了它的优点和局限性,是时候试一试了,看看INDIRECT函数如何简化你的Excel任务。 谢谢你的阅读!