快速链接

快速链接

  • INDIRECT 函数的作用是什么?

  • INDIRECT 语法

  • 使用 INDIRECT 函数前需牢记的事项

  • 如何使用 INDIRECT 函数

您或许在 Excel 中使用单元格引用已经习以为常,但您是否知晓还能更进一步去创建属于自己的单元格引用呢?这时候,INDIRECT 函数就能大显身手啦。

INDIRECT 函数的作用是什么?

INDIRECT 函数的作用是什么?

Excel 的 INDIRECT 函数将文本字符串转换为引用。这个函数有好几项实际的好处:

  • 它允许您创建动态引用。例如,您可以在公式内更改对单元格的引用,而无需更改公式本身。
  • INDIRECT 函数是在工作簿内的工作表之间创建链接的好方法。
  • 您可以使用电子表格中已有的信息创建引用。
  • 使用 INDIRECT 函数创建的引用将保持不变,即使您的工作表结构发生变化。
INDIRECT 语法

INDIRECT 语法

默认情况下,Excel 中的引用使用A1 引用样式,这意味着它首先引用列,然后是行号。但是,INDIRECT 函数使您能够将它们颠倒。

这种颠倒过来的顺序被称作 R1C1 引用样式,其中“R”代表行,“C”代表列。因此,INDIRECT 函数包含两个参数。以下是语法:

=INDIRECT( x, y)

其中x是引用文本,y(可选)是引用样式。

更具体地说,x(引用文本)可以是 A1 样式的引用、R1C1 样式的引用、预定义名称或单元格引用。如果x引用另一个工作簿,则该第二个工作簿必须打开。还值得注意的是,如果您使用的是 Excel 网页版,则无法引用另一个工作簿。

y(引用样式)是一个可选参数。如果您选择不包含此参数,Excel 将自动使用默认的 A1 样式引用,不过您也可以在此处输入TRUE强制 Excel 使用此引用样式。输入FALSE将告诉 Excel 使用 R1C1 引用样式。

在这篇文章里,我会用 A1 样式的引用来给您展示 INDIRECT 函数的工作原理。一旦您把它的概念掌握住了,您就可以试着用用 R1C1 样式的引用。

INDIRECT 函数的结果是一个引用。

使用 INDIRECT 函数前需牢记的事项

使用 INDIRECT 函数前需牢记的事项

在电子表格里开始用 INDIRECT 函数之前,您得知道这么几件事:

  1. 这是 一个易失性的函数,意思就是它老是不停地尝试更新。要是在大型的电子表格里用这个函数,可能会让它运行得很慢,甚至出故障。
  2. 要想把 INDIRECT 函数用得充分,您首先得了解 在 Excel 里怎么创建命名引用。
  3. 与号(&)运算符是创建可用作引用的文本字符串的好方法。
如何使用 INDIRECT 函数

如何使用 INDIRECT 函数

为了让您清楚在实际操作中怎么用 INDIRECT ,咱们来瞧瞧它最基本的形式是咋工作的。

基本示例

基本示例

在这个例子里,在单元格 B2 里输入

=INDIRECT(A1)

会把单元格 A1 变成对单元格 D1 的引用。这就是为啥结果是 5 。

在这个例子里,在单元格 B2 里输入

=SUM(INDIRECT(A2))

先把 A2 转成单元格引用,然后对这个引用里的单元格求和。这是因为 INDIRECT 函数嵌在 SUM 函数里头。

现在,让我们看看使用 INDIRECT 函数引用另一个工作表中的单元格。Sheet2 的单元格 A1 包含数字 100,我们想在当前的工作表里创建对这个单元格的 INDIRECT 引用。首先呢,我们得在单元格 A3 里输入 Sheet2!A1 ,然后通过在单元格 B3 里输入

=INDIRECT(A3)

将其转换为引用。

然而,我们可以通过使用命名引用让这轻松许多。例如,如果我们将 Sheet2 的单元格 A1 重命名为总计,我们可以在 INDIRECT 引用中使用它。要是您正在创建针对另一个工作表的引用,这特别方便,因为它有助于您避免记住语法中的感叹号。此外,如果您的工作表名称更改,INDIRECT 引用将不会适应此更改,因此使用命名引用是更安全和永久的替代方法。

真实世界示例 1

真实世界示例 1

既然我们了解了 INDIRECT 的工作原理,让我们探讨如何在现实世界中使用它来使我们的工作表发挥作用。

在 Excel 中经常是这样,达成相同结果的办法不止一种。例如,您可以包含TAKE 函数以使以下过程更具动态性。但是,我们这里的目的是举例说明 INDIRECT 函数的使用,好让您之后能按照自己的方式去用它。

在这里,我们正在跟踪一支足球队在每场比赛中的进球数,并且我们想要计算出前三场比赛的平均值。

首先,我们将使用COUNT 函数来计算球队到目前为止已经进行了多少场比赛。在单元格 E1 中输入

=COUNT(B:B)

会算出 B 列里包含数字的单元格的总数,从而告诉我们已经进行了多少场比赛。

如果您想计算文本和数字,请使用COUNTA 函数代替。

现在,我们准备使用 INDIRECT 函数将单元格 E1 中的数据转换为引用。这时候,我们的目标是算出单元格 B6 到 B8 中的值的平均值。以下是 INDIRECT 函数将如何帮助我们做到这一点。首先输入

=AVERAGE(INDIRECT

在单元格 E2 里,因为我们告知 Excel 最终是要得出平均值,而且我们还运用 INDIRECT 函数告知 Excel 到何处去查找从而计算这个平均值。

在我们的 AVERAGE 计算里,我们要引用的第一个单元格是 B8,所以我们要添加

=AVERAGE(INDIRECT ("B"&E1)

到我们的公式里。请注意,我们为啥要在列引用的周围使用引号,因为我们正在用这个文本创建单元格引用。

在我们的 AVERAGE 计算中,我们接下来要引用的单元格是 B7,它比 B8 往上一个单元格。所以,添加

=AVERAGE(INDIRECT("B"&E1) ,INDIRECT("B"&E1-1)

到我们的公式意味着 Excel 会创建一个从 B 列开始的单元格引用,接着从 E1 中的值减掉 1。

最后,在我们的 AVERAGE 计算里,我们想要引用单元格 B6,它比 B8 往上两个单元格,然后加上右括号:

=AVERAGE(INDIRECT("B"&E1),INDIRECT("B"&E1-1) ,INDIRECT("B"&E1-2))

这正确算出了 3、1 和 1 的平均值,这就是过去三场比赛中的进球总数。

现在,当我们给 B 列添加更多数据的时候,单元格 E1 里的值就会增加,因为 COUNT 函数能识别出 B 列中有更多的值,而且 INDIRECT 引用也会相应更新,一直能在我们的 AVERAGE 公式里抓取到最后三个值。所有这些操作都不用更改我们输入到单元格 E2 里的公式。

真实世界示例 2

真实世界示例 2

咱们再来看一个例子。这一回,我们要用命名引用,这样就能在Excel 的 VLOOKUP 函数里使用 INDIRECT 了。

我们想让 Excel 告诉我们这四个人在第 1 周或者第 2 周各自赚了多少钱,而且如果有需要的话,还能更改那个周数。

首先,我们需要将单元格 B1 到 C5 命名为“week_1”,将单元格 B7 到 B11 命名为“week_2”。然后,在 G2 单元格里,我们将输入

=VLOOKUP(E2,INDIRECT("week_"&F2),2,0)

因为我们想让 Excel 在我们命名为“week_1”的这个范围内查找汤姆(Tom)的值,然后返回这个范围第二列里对应的精确匹配值。

然后我们就可以用填充柄来为其他三个人完成数据,要知道我们创建的引用既与他们各自的行相关,又因为我们使用了命名引用而有保障。

然后,对 C 列或 F 列中的值的任何更改都会自动应用于我们刚刚编写的公式。

要完成让您的电子表格完全动态且整洁的这个过程,您可以用 Excel 的数据验证工具添加下拉菜单 。在上面的示例中,您可以通过下拉菜单访问个人的姓名,以便查找表仅占用一行。