INDIRECT() 函数是 Excel 中最强大但也常被误解的工具之一。与直接执行计算的函数不同,INDIRECT() 会将文本字符串转换为实时的单元格引用。这使您能够创建可根据变量输入自适应的动态、灵活公式。无论您是在构建汇总仪表板、根据用户选择引用不同工作表,还是动态更改单元格引用,INDIRECT() 都能带来颠覆性效果。
在本指南中,我将向您展示如何使用 INDIRECT() 进行单元格引用,并排查常见问题,包括何时应避免使用该函数。如果您对一些基础知识还不熟悉,建议先学习我们的 Introduction to Excel 课程以打好基础。
INDIRECT() 函数的作用
Excel 中的 INDIRECT() 函数根据作为文本字符串提供的引用,检索某个单元格或区域的值。与其在公式中硬编码单元格地址(如 "A1"),INDIRECT() 允许您使用文本动态定义该地址,Excel 会将其解释为实时引用。
INDIRECT() 函数的语法如下:
INDIRECT(ref_text, [a1])技术支持
其中:
如何使用 INDIRECT() 函数
以下示例展示了 INDIRECT() 如何动态地将文本转换为单元格引用。
假设单元格 C2 中包含文本 "A2",而单元格 A2 的值为 100。下面的函数也会返回 100,因为 Excel 读取 C2 的内容,而 INDIRECT() 将其视为引用。
=INDIRECT(C2)技术支持

在 Excel 中使用 INDIRECT() 基于另一个单元格进行引用。图片来源:作者。
如果单元格 A5 的数值为 5,您可以使用下面的公式构建一个动态引用:
=INDIRECT("B"&A5)技术支持
该公式将 "B" 与 A5 中的数值(6)拼接,形成 "B6"。随后 INDIRECT() 返回单元格 B6 的值,即 "Product A"。

在 Excel 中将 INDIRECT() 与 & 结合实现动态引用。图片来源:作者。
INDIRECT() 在 Excel 中的动态用法
INDIRECT() 的真正强大之处在于其构建动态引用的能力。这使其非常适合用于高级建模、仪表板和用户驱动的报表。下面的三个关键用例展示了它的灵活性。
引用其他工作表
您可以使用 INDIRECT() 按照单元格输入,动态地从不同工作表提取数据。例如,如果在单元格 A1 中包含工作表名称,如 "Sales",您希望提取该工作表上 B2 单元格的值。
下面的公式会构造类似 'Sales'!B2 的引用,并返回该单元格的值。
=INDIRECT("'" & A1 & "'!B2")技术支持

在 Excel 中使用 INDIRECT() 间接引用其他工作表。图片来源:作者。
如果工作表名可能包含空格或特殊字符(如 'Sales 2023'!A1),请务必使用单引号 ' 将工作表名称包裹起来。
引用命名范围
您还可以使用 INDIRECT() 动态引用命名范围,结合下拉菜单或用户输入时尤为强大。
假设您有命名范围 Sales_2023 和 Sales_2023,其中单元格 “A1” 包含 "Sales_2023"

在 Excel 中为单元格区域命名。图片来源:作者。
下面的公式会对命名范围 Sales_2023 中的数值求和,即便公式中并未直接写出该名称。此方法非常适用于用户驱动的仪表板或包含多种情景的模型。
=SUM(INDIRECT(A1))技术支持

在 Excel 中使用 INDIRECT() 引用命名范围。图片来源:作者。
不随变动而改变的固定引用
通常,当您插入或删除行、列时,公式中的单元格引用会自动调整。但 INDIRECT() 会创建不会移动的绝对引用。
例如,若单元格 “A1” 的值为 100,则公式 =A1 与 =INDIRECT("A1") 都会返回 100。不过,如果您移动该数值

Excel 中的直接单元格引用。图片来源:作者。

在 Excel 中使用 INDIRECT() 进行单元格引用。图片来源:作者。
然而,如果您在第 1 行上方插入新行,D3(原为 B2)现在会显示 =A3,因为该值随行移动。带有 INDIRECT() 的单元格 E3 仍然显示最初的 A2,而 A2 现在可能为空或包含不同的值(UID)。

在 Excel 中使用 INDIRECT() 实现固定引用。图片来源:作者。
高级示例与用例
当您熟悉了基础用法后,INDIRECT() 在更高级的 Excel 场景中会大放异彩,尤其是与 VLOOKUP()、ROW() 以及动态数组等函数配合时。这些组合能解锁更强的动态性与灵活性。
将 INDIRECT() 与 VLOOKUP() 搭配
您可以将 INDIRECT() 与 VLOOKUP() 结合,根据用户输入动态切换查找表。
假设您有两个表 Prices_2022 和 Prices_2023。在不同的单元格中,G1:Prices_2022,G2:Apple`。下面的公式会基于 A1 中的值,在所选年份的表中动态查找 “Apple”,并返回其价格。
=VLOOKUP(G2, INDIRECT(G1), 2, FALSE)技术支持

在 Excel 中将 INDIRECT() 与 VLOOKUP() 结合使用。图片来源:作者。
查看我们的教程 VLOOKUP() from Another Sheet: A How-to in Excel,进一步了解如何在不同工作表之间搜索并提取数据。
INDIRECT() 与 R1C1 引用
INDIRECT() 也可使用 R1C1 标记法,这在宏中动态构建公式或以编程方式引用位置时尤其有用。
例如,下面的公式返回第 2 行第 3 列(单元格 C2)的值。第二个参数(FALSE)告诉 Excel 使用 R1C1 样式,而非 A1。
=INDIRECT("R2C3", FALSE)技术支持

在 Excel 中将 INDIRECT() 与 R1C1 搭配。图片来源:作者。
下面的公式则结合了 ROW() 与 COLUMN() 的动态用法。无论公式写在哪一行,它都会返回同一行中第 3 列的值。
=INDIRECT("R" & ROW() & "C3", FALSE)技术支持

在 Excel 中将 INDIRECT() 与 ROW()、COLUMN() 结合。图片来源:作者。
INDIRECT() 与动态数组
在 Excel 引入动态数组之前,INDIRECT() 常被用来模拟数组行为。
例如,下面的公式会返回一个数组:{1; 2; 3; 4; 5}。它通过间接引用行来模拟 1 到 5 的数组。
=ROW(INDIRECT("1:5"))技术支持

在 Excel 中将 INDIRECT() 与 ROW() 搭配用于动态数组。图片来源:作者。
现代的替代方法是使用 SEQUENCE() 函数。
=SEQUENCE(5)技术支持

在 Excel 中使用 SEQUENCE() 生成动态数组。图片来源:作者。
使用 INDIRECT() 来生成动态数组依然可行,但与现代 Excel(Office 365 和 Excel 2021+)中的 SEQUENCE()、FILTER() 等动态数组函数相比,效率更低、可读性也更差。
注意事项与性能问题
INDIRECT() 在大型或复杂的工作簿中存在一些重要限制,主要包括:
-
易变函数(频繁重算):INDIRECT() 是易变函数,意味着无论工作簿中哪里发生任何更改,它都会重新计算,即便更改与该公式无关。这可能导致性能下降。
-
调试较为困难:由于 INDIRECT() 是从文本构造引用,Excel 无法像标准单元格引用那样轻松跟踪它们。这会使“追踪从属/引用单元格”或在发生变更时捕捉断裂引用变得困难。
-
考虑使用现代替代方案:在可能的情况下,优先考虑非易变、性能更好且更清晰的函数。例如用于动态单元格查找的 INDEX()、用于在预定义区域或选项间动态选择的 CHOOSE(),以及用于生成动态数字数组的 SEQUENCE()。
何时应避免使用 INDIRECT()
尽管 INDIRECT() 十分灵活强大,但并非总是最佳选择。它常会带来不必要的复杂性、性能问题或可维护性隐患。以下情形应尽量避免,并采用更佳替代方法。
-
同一工作表内的动态单元格引用:使用 INDEX() 替代 INDIRECT(),以获得更好的性能与可追溯性。
-
动态数组或数字序列:避免使用 =ROW(INDIRECT("1:10"))。请改用 =SEQUENCE(10),更快、更简洁,且非易变。
-
当可追溯性很重要时:包含 INDIRECT() 的公式无法有效使用“追踪引用单元格”或“公式求值”。
-
引用静态单元格或区域:若只需 =A1,请勿写成 INDIRECT("A1")。
-
在大型表格中大量使用:由于 INDIRECT() 是易变函数,会不断重算,显著拖慢性能。
INDIRECT() 的替代方案
下表总结了替代 INDIRECT() 的最佳选择。
|
目标
|
优先于 INDIRECT() 的选择
|
|
动态单元格引用
|
INDEX()
|
|
生成序列
|
SEQUENCE()
|
|
条件逻辑或更简洁的公式
|
LET()
|
|
多情景查找
|
CHOOSE() 或 XLOOKUP()
|
|
灵活的工作表公式
|
XLOOKUP() 配合结构化数据或 Power Query
|
要点回顾
INDIRECT() 可将文本字符串转换为实时引用,是构建动态、灵活电子表格的强大工具。它适用于引用不同工作表、命名范围,或在变更时不应移动的固定单元格。不过,它是易变函数,会频繁重算,可能拖慢大型工作簿;与传统函数相比,也更难追踪与调试。请有选择地使用 INDIRECT(),并考虑更安全高效的替代方案。
推荐您学习我们的 Data Analysis in Excel 课程,了解 B2B 数据洞察;还可学习 Excel Fundamentals 技能路径,深入了解最新 Excel 版本中的函数。如果您正在探索高级引用与查找,我们的 Advanced Excel Functions 课程十分适合。
INDIRECT()函数是 Excel 中最强大但也常被误解的工具之一。与直接执行计算的函数不同,INDIRECT()会将文本字符串转换为实时的单元格引用。这使您能够创建可根据变量输入自适应的动态、灵活公式。无论您是在构建汇总仪表板、根据用户选择引用不同工作表,还是动态更改单元格引用,INDIRECT()都能带来颠覆性效果。在本指南中,我将向您展示如何使用
INDIRECT()进行单元格引用,并排查常见问题,包括何时应避免使用该函数。如果您对一些基础知识还不熟悉,建议先学习我们的 Introduction to Excel 课程以打好基础。INDIRECT() 函数的作用
Excel 中的
INDIRECT()函数根据作为文本字符串提供的引用,检索某个单元格或区域的值。与其在公式中硬编码单元格地址(如"A1"),INDIRECT()允许您使用文本动态定义该地址,Excel 会将其解释为实时引用。INDIRECT()函数的语法如下:其中:
ref_text(必需):表示有效单元格或区域引用的文本字符串。可以指向某个单元格(如"A1")、命名范围,或其他工作表上的引用(如"Sheet2!B5")。[a1]:可选参数,用于指定ref_text的引用类型。如果 a1 为TRUE或省略,ref_text将按 A1 样式解析;如果 a1 为FALSE,则按 R1C1 样式解析。如何使用 INDIRECT() 函数
以下示例展示了
INDIRECT()如何动态地将文本转换为单元格引用。假设单元格 C2 中包含文本
"A2",而单元格 A2 的值为 100。下面的函数也会返回 100,因为 Excel 读取 C2 的内容,而INDIRECT()将其视为引用。在 Excel 中使用 INDIRECT() 基于另一个单元格进行引用。图片来源:作者。
如果单元格 A5 的数值为
5,您可以使用下面的公式构建一个动态引用:该公式将
"B"与 A5 中的数值(6)拼接,形成"B6"。随后INDIRECT()返回单元格 B6 的值,即"Product A"。在 Excel 中将 INDIRECT() 与 & 结合实现动态引用。图片来源:作者。
INDIRECT() 在 Excel 中的动态用法
INDIRECT()的真正强大之处在于其构建动态引用的能力。这使其非常适合用于高级建模、仪表板和用户驱动的报表。下面的三个关键用例展示了它的灵活性。引用其他工作表
您可以使用
INDIRECT()按照单元格输入,动态地从不同工作表提取数据。例如,如果在单元格 A1 中包含工作表名称,如"Sales",您希望提取该工作表上 B2 单元格的值。下面的公式会构造类似
'Sales'!B2的引用,并返回该单元格的值。在 Excel 中使用 INDIRECT() 间接引用其他工作表。图片来源:作者。
如果工作表名可能包含空格或特殊字符(如
'Sales 2023'!A1),请务必使用单引号'将工作表名称包裹起来。引用命名范围
您还可以使用
INDIRECT()动态引用命名范围,结合下拉菜单或用户输入时尤为强大。假设您有命名范围
Sales_2023和Sales_2023,其中单元格 “A1” 包含"Sales_2023"在 Excel 中为单元格区域命名。图片来源:作者。
下面的公式会对命名范围
Sales_2023中的数值求和,即便公式中并未直接写出该名称。此方法非常适用于用户驱动的仪表板或包含多种情景的模型。在 Excel 中使用 INDIRECT() 引用命名范围。图片来源:作者。
不随变动而改变的固定引用
通常,当您插入或删除行、列时,公式中的单元格引用会自动调整。但
INDIRECT()会创建不会移动的绝对引用。例如,若单元格 “A1” 的值为
100,则公式=A1与=INDIRECT("A1")都会返回100。不过,如果您移动该数值Excel 中的直接单元格引用。图片来源:作者。
在 Excel 中使用 INDIRECT() 进行单元格引用。图片来源:作者。
然而,如果您在第 1 行上方插入新行,D3(原为 B2)现在会显示 =A3,因为该值随行移动。带有
INDIRECT()的单元格 E3 仍然显示最初的 A2,而 A2 现在可能为空或包含不同的值(UID)。在 Excel 中使用 INDIRECT() 实现固定引用。图片来源:作者。
高级示例与用例
当您熟悉了基础用法后,
INDIRECT()在更高级的 Excel 场景中会大放异彩,尤其是与VLOOKUP()、ROW()以及动态数组等函数配合时。这些组合能解锁更强的动态性与灵活性。将 INDIRECT() 与 VLOOKUP() 搭配
您可以将
INDIRECT()与VLOOKUP()结合,根据用户输入动态切换查找表。假设您有两个表
Prices_2022和Prices_2023。在不同的单元格中,G1:Prices_2022,G2:Apple`。下面的公式会基于 A1 中的值,在所选年份的表中动态查找 “Apple”,并返回其价格。在 Excel 中将 INDIRECT() 与 VLOOKUP() 结合使用。图片来源:作者。
查看我们的教程 VLOOKUP() from Another Sheet: A How-to in Excel,进一步了解如何在不同工作表之间搜索并提取数据。
INDIRECT() 与 R1C1 引用
INDIRECT()也可使用 R1C1 标记法,这在宏中动态构建公式或以编程方式引用位置时尤其有用。例如,下面的公式返回第 2 行第 3 列(单元格 C2)的值。第二个参数(
FALSE)告诉 Excel 使用 R1C1 样式,而非 A1。在 Excel 中将 INDIRECT() 与 R1C1 搭配。图片来源:作者。
下面的公式则结合了
ROW()与COLUMN()的动态用法。无论公式写在哪一行,它都会返回同一行中第 3 列的值。在 Excel 中将 INDIRECT() 与 ROW()、COLUMN() 结合。图片来源:作者。
INDIRECT() 与动态数组
在 Excel 引入动态数组之前,
INDIRECT()常被用来模拟数组行为。例如,下面的公式会返回一个数组:
{1; 2; 3; 4; 5}。它通过间接引用行来模拟 1 到 5 的数组。在 Excel 中将 INDIRECT() 与 ROW() 搭配用于动态数组。图片来源:作者。
现代的替代方法是使用
SEQUENCE()函数。在 Excel 中使用 SEQUENCE() 生成动态数组。图片来源:作者。
使用
INDIRECT()来生成动态数组依然可行,但与现代 Excel(Office 365 和 Excel 2021+)中的SEQUENCE()、FILTER()等动态数组函数相比,效率更低、可读性也更差。注意事项与性能问题
INDIRECT()在大型或复杂的工作簿中存在一些重要限制,主要包括:易变函数(频繁重算):
INDIRECT()是易变函数,意味着无论工作簿中哪里发生任何更改,它都会重新计算,即便更改与该公式无关。这可能导致性能下降。调试较为困难:由于
INDIRECT()是从文本构造引用,Excel 无法像标准单元格引用那样轻松跟踪它们。这会使“追踪从属/引用单元格”或在发生变更时捕捉断裂引用变得困难。考虑使用现代替代方案:在可能的情况下,优先考虑非易变、性能更好且更清晰的函数。例如用于动态单元格查找的
INDEX()、用于在预定义区域或选项间动态选择的CHOOSE(),以及用于生成动态数字数组的SEQUENCE()。何时应避免使用 INDIRECT()
尽管
INDIRECT()十分灵活强大,但并非总是最佳选择。它常会带来不必要的复杂性、性能问题或可维护性隐患。以下情形应尽量避免,并采用更佳替代方法。同一工作表内的动态单元格引用:使用
INDEX()替代INDIRECT(),以获得更好的性能与可追溯性。动态数组或数字序列:避免使用
=ROW(INDIRECT("1:10"))。请改用=SEQUENCE(10),更快、更简洁,且非易变。当可追溯性很重要时:包含
INDIRECT()的公式无法有效使用“追踪引用单元格”或“公式求值”。引用静态单元格或区域:若只需
=A1,请勿写成INDIRECT("A1")。在大型表格中大量使用:由于
INDIRECT()是易变函数,会不断重算,显著拖慢性能。INDIRECT() 的替代方案
下表总结了替代 INDIRECT() 的最佳选择。
目标
优先于 INDIRECT() 的选择
动态单元格引用
INDEX()生成序列
SEQUENCE()条件逻辑或更简洁的公式
LET()多情景查找
CHOOSE()或XLOOKUP()灵活的工作表公式
XLOOKUP()配合结构化数据或 Power Query要点回顾
INDIRECT()可将文本字符串转换为实时引用,是构建动态、灵活电子表格的强大工具。它适用于引用不同工作表、命名范围,或在变更时不应移动的固定单元格。不过,它是易变函数,会频繁重算,可能拖慢大型工作簿;与传统函数相比,也更难追踪与调试。请有选择地使用INDIRECT(),并考虑更安全高效的替代方案。推荐您学习我们的 Data Analysis in Excel 课程,了解 B2B 数据洞察;还可学习 Excel Fundamentals 技能路径,深入了解最新 Excel 版本中的函数。如果您正在探索高级引用与查找,我们的 Advanced Excel Functions 课程十分适合。