Excel 中的 INDIRECT 函数是将文本字符串转换为有效的引用,并立即对引用进行计算,显示其内容。当需要通过连接单独的文本字符串来构建文本值时,INDIRECT 非常有用。

目的
从文本创建引用
返回值
有效的单元格引用
语法
INDIRECT (ref_text, [a 1])
参数
Ref_text(必需):它是对包含以下内容之一的单元格的引用:
A 1 样式引用。
R 1 C 1 样式引用。
定义为引用的命名区域。
对文本字符串形式的单元格的引用。
[a1](可选):是一个逻辑值,用于指定包含在单元格 ref_text 中的引用的类型。
如果 a 1 为 TRUE 或省略,则 ref_text 被解释为 A 1 样式引用。
如果 a 1 为 FALSE,则 ref_text 被解释为 R 1 C 1 样式引用。
返回 # REF!错误值
Ref_text 不是有效的单元格引用
Ref_text 引用另一个未打开的工作簿
Ref_text 单元格区域超出行限制 1,048,576 或列限制 16,384 (XFD)
用法和示例
INDIRECT 函数的目的乍一看似乎令人困惑(即,当可直接引用单元格时,为什么要使用文本?),但在许多情况下,从文本创建引用很有用,包括:
需要可变工作表名称的公式
需要组合文本引用单元格的公式
即使删除行或列也不会更改的固定引用
与 VLOOKUP 函数组合使用动态查找值
注意:INDIRECT 是一个易失性函数(在每次工作表更改时重新计算),可能会导致大型或复杂工作表中的性能问题。
示例 1:间接单元格引用
如下图所示,INDIRECT 函数将 B 4 中的文本字符串转换为有效的单元格引用,然后返回此单元格引用(D 4)的值。
=INDIRECT(B4) //返回D4的值

注释:
如果 ref_text 括在双引号中,例如,=INDIRECT (“B 4”)则将直接获取 B 4 中的值。
还可以在间接函数中组合文本字符串和单元格引用,如下图所示。
=INDIRECT("D"&B4) //返回D4的值
在这里,INDIRECT 函数将 ref_text(D)和 B 4 中的值(4)连接为有效的单元格引用 D 4,并返回 D 4 中的值。
示例 2:可变工作表名称
=INDIRECT(B5&"!A1") //B5中的工作表名称是可变的
公式中将 B 5 中的文本与“! A 1”字符串相链接,并将结果返回给 INDIRECT。然后,INDIRECT 函数计算文本并将其转换为正确的引用。C 5:C 9 中的结果是 B 列中列出的每个工作表 A 1 中单元格的值。
如果在 B 5 中输入不同的工作表名称,则返回该工作表中 A 1 单元格的值。因此,使用相同的方法,可以创建下拉列表选择工作表名称,然后使用 INDIRECT 构建对所选工作表的引用。

示例 3:固定引用
即使插入或删除单元格、行或列,由 INDIRECT 创建的引用也不会更改。例如,下面的公式将始终引用 A 列的前 100 行,即使删除或插入了该范围内的行也是如此:
=INDIRECT("A1:A100") // 引用不会更改
示例 4:命名范围
INDIRECT 函数可以轻松地与命名范围一起使用。在下图的工作表中,有两个命名范围:组 1(B 5:B 12)和组 2(C 5:C 12)。在单元格 F 1 中输入“组 2”或“组 5”时,单元格 F 6 中的公式使用 INDIRECT 对适当的范围求和,如下所示:
=SUM(INDIRECT(F5))
F 5 中的值是文本,但 INDIRECT 会将文本转换为有效范围。

示例 5:查找值
若要基于多个数据表查找值,可以将 VLOOKUP 函数与 INDIRECT 函数一起使用。
=VLOOKUP(E6,INDIRECT("供货商_"&F6),2,0)
在此示例中,目标是使用 VLOOKUP 函数根据供应商名称查找成本。换句话说,我们要用一个公式,根据值动态切换数据表。
工作表中有两个成本表,供应商 A,供应商 B。这两个表分别定义名称为供应商_A(B 6:C 9)和供应商_B (B 13:C 16)。VLOOKUP 用于获取两个供应商 A 和 B 的成本。使用 F 列中指示的供应商,VLOOKUP 会自动使用正确的表。
总结
INDIRECT 是从文本创建的引用,并显示引用的内容。
当 ref_text 是对另一个工作簿的外部引用时,该工作簿必须处于打开状态。
A 1 是可选的。省略时,a 1 为 TRUE = A 1 样式引用。当 a 1 设置为 FALSE 时,INDIRECT 将创建 R 1 C 1 样式的引用。
INDIRECT 是一个易失性函数,可能会导致大型或复杂工作表中的性能问题。
我是 Excel 从繁到简,关注我,持续分享更多的 Excel 技巧!