ZetCode

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 公式
=INDIRECT(B1)

此公式从单元格 B1 获取文本“A1”,并将其转换为对单元格 A1 的引用。结果将是 A1 中的值 100。这展示了文本到引用的基本转换。

INDIRECT 与动态工作表引用

INDIRECT 可以动态创建对不同工作表的引用。此示例显示如何引用另一个单元格中命名的工作表中的单元格。

A B
Sheet2
=INDIRECT(A1&"!B5")

假设存在 Sheet2,并且 Sheet2 上的单元格 B5 包含 250。B2 中的公式将 A1 中的工作表名称与单元格引用组合起来,以创建动态的跨工作表引用。

INDIRECT 与工作表引用
=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 用于相关下拉列表
=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 与 R1C1 样式
=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)进行求和。

INDIRECT 与 SUM 结合用于动态范围
=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”。

INDIRECT 与表格列引用
=SUM(INDIRECT("Table1["&B1&"]"))

此公式构建对表格列的结构化引用。它将“Table1[”与 B1 中的列名和“]”连接起来,形成“Table1[Price]”。INDIRECT 将其转换为 SUM 可以用来对列进行总计的引用。

INDIRECT 的易变性

INDIRECT 是一个易失性函数,这意味着它在工作簿发生任何更改时都会重新计算。此示例演示了此行为。

A B
引用 A10
=INDIRECT(B1)

如果您将 B1 从“A10”更改为“A20”,INDIRECT 公式会立即重新计算以显示 A20 中的值。即使直接计算链中的任何单元格未被修改,也会发生这种情况。

易失性 INDIRECT 公式
=INDIRECT(B1)

此公式将在工作簿中的任何单元格发生更改时重新计算,而不仅仅是 B1 或被引用的单元格更改时。在大型工作簿中,如果包含大量 INDIRECT 函数,这可能会影响性能。

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 作为 INDIRECT 替代方案
=INDEX(A1:A3, B2, C2)

此公式提供了与 INDIRECT 相似的动态引用功能,但性能更好。它返回范围 A1:A3 中第 B2(2)行和第 C2(1)列的值。当您不需要基于文本的引用时,可以考虑使用 INDEX。

INDIRECT 函数是创建 Excel 动态引用的强大工具。从基本的单元格引用到复杂的跨工作表公式,INDIRECT 可以处理许多高级场景。请记住,它具有易失性,并且无法引用关闭的工作簿。请谨慎使用,并在适当的情况下考虑 INDEX 等替代方案。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 Excel 公式