通过中间值获取数据的INDIRECT函数

INDIRECT函数接受2个参数,第1个参数是代表单元格引用的字符串,第2个参数指定单元格引用的样式,然后返回第1个参数指定的引用单元格中的数据。

INDIRECT函数的基本使用如图1所示。

图1

一键直达 >> Excel函数学习14:INDIRECT函数

INDIRECT函数之美

INDIRECT函数分析其参数所引用的单元格并获取该单元格中的值,参数中放置着数据的单元格地址,仿佛C语言中的指针,具有解析之美。

获取指定的单元格地址所引用的单元格值

如下图2所示的工作表,在单元格E8中是有效的单元格地址,单元格E9中的公式使用单元格E8作为参数,获取该单元格中的值所指定的单元格中的值:

=INDIRECT(E8)

当单元格E8中的单元格地址改变时,E9中获取的值相应变化。

图2

如下图3所示,将要获取值的单元格行号列标分别放在两个单元格中,然后使用这两个单元格作为INDIRECT函数的参数提取其组成的单元格地址中的值:

=INDIRECT(E8 & E9)

示例中是单元格B5中的值,你可以改变行号列标返回不同的值。

图3

总是引用固定的单元格

如图4所示,使用公式:

=IF(ISBLANK(INDIRECT("B5")),"值为空","正常")

无论删除行还是插入行,或是将B5剪切并粘贴到其他地方,公式将总是指向单元格B5。

图4

获取命名区域引用的单元格的数据

如图5所示,将每列数值以列标题命名,设置单元格C4的数据有效性为序列,值为单元格区域B1:E1中的数据,即为列区域的名称。

在单元格B9中的公式为:

=C8 &"的销量为:"

在单元格C9中的公式为:

=SUM(INDIRECT(C8))

这样,选择单元格C8下拉列表中的某值后,单元格C9会自动进行计算,B8也会相应更新。

图5

获取另一工作表中的数据

如图6所示,在班级工作表中,语文、数学、英语的平均分都在相同位置的单元格B2中,现在要将它们提取汇总到图6的工作表中,在单元格B3中的公式为:

=INDIRECT("'" &B$2 & "'!" & "B2")

将其向右拖到单元格D3,即可获取各个班级的语文平均分。

图6

然而,由于单元格B2是硬编码,将公式向下拖动时,仍然得到的是语文平均分。此时,我们可以使用R1C1样式的公式获取数值,在单元格B3中输入公式:

=INDIRECT("'" &B$2 & "'!R[-1]C2",FALSE)

向右向下拖动,即可获取其他工作表中相应的数据。

图7

注:也可以使用CELL函数或者ADDRESS函数达到同样的效果。

为ROW函数提供合法的参数

Excel不允许以下面的形式输入:

ROW(1:LEN(A1))

此时,可以通过INDIRECT函数来达到:

ROW(INDIRECT(“1:” & LEN(A1))

Excel会将其转换为INDIRECT(“1:5”)并传递给ROW函数。

这还有一个好处,就是当拖动公式时,由INDIRECT函数得到的数值不会随单元格的变化发生变化,避免了公式因为相对引用发生错误。

结语

INDIRECT函数获取参数指定的单元格中的值,并且能够解析命名区域,引用其他工作表,这些都为数据的获取提供了想像空间。并且,INDIRECT函数为VLOOKUP函数或者SUMIF函数等提供单元格区域,为ROW函数提供合法的参数,让公式发挥出更强大的威力。

(0)

相关推荐