Excel INDIRECT 函数
最后修改于 2025 年 4 月 4 日
INDIRECT
函数是 Excel 中一个强大的查找函数,它可以返回由文本字符串指定的引用。本教程将通过详细的示例,全面介绍如何使用 INDIRECT
函数。您将学习其基本语法、实际应用和高级技巧,以掌握这个灵活的 Excel 函数。
INDIRECT 函数基础
INDIRECT
函数将文本字符串转换为单元格引用。它允许您创建动态引用,这些引用可以根据其他单元格的值进行更改。该函数有两个参数。
组成部分 | 描述 |
---|---|
函数名称 | INDIRECT |
语法 | =INDIRECT(ref_text, [a1]) |
参数 | ref_text:必需。文本引用 a1:可选。引用样式(TRUE 表示 A1 样式,FALSE 表示 R1C1 样式) |
返回值 | 由文本字符串指定的单元格引用 |
此表分解了 INDIRECT
函数的基本组成部分。它显示了函数名称、语法格式、参数详细信息和返回值特性。
基本 INDIRECT 示例
此示例演示了 INDIRECT 最简单的用法,即通过文本引用一个单元格。
A | B |
---|---|
100 | A1 |
=INDIRECT(B1) |
该表显示单元格 A1 包含值 100,单元格 B1 包含文本“A1”。B2 中的 INDIRECT 函数将文本“A1”转换为对单元格 A1 的实际引用。
=INDIRECT(B1)
此公式从单元格 B1 获取文本“A1”,并将其转换为对单元格 A1 的引用。结果将是 A1 中的值 100。这展示了文本到引用的基本转换。
INDIRECT 与动态工作表引用
INDIRECT 可以动态创建对不同工作表的引用。此示例显示如何引用另一个单元格中命名的工作表中的单元格。
A | B |
---|---|
Sheet2 | |
=INDIRECT(A1&"!B5") |
假设存在 Sheet2,并且 Sheet2 上的单元格 B5 包含 250。B2 中的公式将 A1 中的工作表名称与单元格引用组合起来,以创建动态的跨工作表引用。
=INDIRECT(A1&"!B5")
此公式将 A1 中的工作表名称(“Sheet2”)与“!B5”连接起来,创建引用“Sheet2!B5”。然后,INDIRECT 将其评估为正确的单元格引用。结果是 Sheet2!B5 中的值(250)。
INDIRECT 与数据验证列表
INDIRECT 通常与数据验证一起使用,以创建相关的下拉列表。此示例显示了一个简单的两级相关下拉列表。
A | B |
---|---|
水果 | Apple |
蔬菜 | 胡萝卜 |
首先创建命名范围:“Fruits”对应 B1:B3(Apple、Banana、Orange),“Vegetables”对应 B4:B6(Carrot、Potato、Onion)。然后设置 A1:A2 的数据验证用于类别,并使用 INDIRECT 来处理 B1:B2 中的项目。
=INDIRECT(A1)
当在数据验证中使用时,此公式使 B 列中的下拉列表依赖于 A 列中的选择。如果 A1 是“Fruits”,B1 显示水果;如果 A2 是“Vegetables”,B2 显示蔬菜。
INDIRECT 与 R1C1 引用样式
INDIRECT 可以使用 A1 或 R1C1 引用样式。此示例通过创建相对引用来演示 R1C1 样式。
A | B |
---|---|
10 | |
20 | |
30 | |
=INDIRECT("R"&ROW()&"C1", FALSE) |
B4 中的公式使用 R1C1 表示法引用当前行的第 1 列。ROW() 返回 4,因此它构建“R4C1”,指向 A4(空,返回 0)。
=INDIRECT("R"&ROW()&"C1", FALSE)
此公式动态构建 R1C1 引用。FALSE 参数告诉 INDIRECT 使用 R1C1 样式。它对于创建基于位置进行调整的相对引用很有用。
INDIRECT 用于对可变范围求和
INDIRECT 可以帮助创建 SUM 公式,其动态范围在其他单元格中指定。此示例对由单元格中的开始和结束点定义的范围进行求和。
A | B | C |
---|---|---|
开始 | A2 | |
结束 | A5 | |
10 | ||
20 | ||
30 | ||
=SUM(INDIRECT(B1&":"&B2)) |
C6 中的公式通过将 B1(“A2”)和 B2(“A5”)中的引用组合成“A2:A5”来对从 A2 到 A5 的范围(10+20+30 = 60)进行求和。
=SUM(INDIRECT(B1&":"&B2))
此公式将开始(B1)和结束(B2)引用与冒号连接,以创建范围字符串(“A2:A5”)。INDIRECT 将其转换为 SUM 可以求值的实际范围。结果是 60。
INDIRECT 与表格引用
INDIRECT 可以动态引用 Excel 表格的列。此示例显示如何根据单元格值引用表中的不同列。
A | B | C |
---|---|---|
列 | 价格 | |
=SUM(INDIRECT("Table1["&B1&"]")) |
假设我们有一个名为“Table1”的表格,其中包含“Price”、“Quantity”等列。C2 中的公式对“Price”列求和,因为 B1 包含“Price”。
=SUM(INDIRECT("Table1["&B1&"]"))
此公式构建对表格列的结构化引用。它将“Table1[”与 B1 中的列名和“]”连接起来,形成“Table1[Price]”。INDIRECT 将其转换为 SUM 可以用来对列进行总计的引用。
INDIRECT 的易变性
INDIRECT 是一个易失性函数,这意味着它在工作簿发生任何更改时都会重新计算。此示例演示了此行为。
A | B |
---|---|
引用 | A10 |
=INDIRECT(B1) |
如果您将 B1 从“A10”更改为“A20”,INDIRECT 公式会立即重新计算以显示 A20 中的值。即使直接计算链中的任何单元格未被修改,也会发生这种情况。
=INDIRECT(B1)
此公式将在工作簿中的任何单元格发生更改时重新计算,而不仅仅是 B1 或被引用的单元格更改时。在大型工作簿中,如果包含大量 INDIRECT 函数,这可能会影响性能。
INDIRECT 与外部引用
INDIRECT 无法直接引用关闭的工作簿。此示例显示了使用辅助单元格的解决方法。
=INDIRECT("'"&A1&"["&B1&"]"&C1&"'!"&D1)
其中 A1=工作簿名称,B1=工作表名称,C1=文件扩展名,D1=单元格引用。这仅在外部工作簿打开时才有效。对于关闭的工作簿,请考虑使用 VBA 或 Power Query。
INDIRECT 与 INDEX 动态引用比较
虽然 INDIRECT 具有灵活性,但 INDEX 通常在性能方面更好。此示例比较了两种方法。
A | B | C |
---|---|---|
数据 | 行 | 列 |
10 | 2 | 1 |
20 | ||
30 | ||
=INDEX(A1:A3, B2, C2) |
C4 中的 INDEX 公式返回 20(A1:A3 的第 2 行,第 1 列)。与 INDIRECT 不同,INDEX 是非易失性的,并且在可能的情况下,通常更适合动态引用。
=INDEX(A1:A3, B2, C2)
此公式提供了与 INDIRECT 相似的动态引用功能,但性能更好。它返回范围 A1:A3 中第 B2(2)行和第 C2(1)列的值。当您不需要基于文本的引用时,可以考虑使用 INDEX。
INDIRECT
函数是创建 Excel 动态引用的强大工具。从基本的单元格引用到复杂的跨工作表公式,INDIRECT
可以处理许多高级场景。请记住,它具有易失性,并且无法引用关闭的工作簿。请谨慎使用,并在适当的情况下考虑 INDEX 等替代方案。
作者
列出 所有 Excel 公式。