如何通过中间值获取数据的INDIRECT函数
INDIRECT函数接受2个参数,第1个参数是代表单元格引用的字符串,第2个参数指定单元格引用的样式,然后返回第1个参数指定的引用单元格中的数据。
INDIRECT函数的基本使用如图1所示。
图1
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函数得到的数值不会随单元格的变化发生变化,避免了公式因为相对引用发生错误。