indirect函数用于返回文本字符串指定的引用。其语法为INDIRECT(ref_text,[a1])。参数ref_text指对其他单元格的引用。参数a1是可选参数,如果a1为True或省略,则为A1样式的引用;如果a1为False,则为R1C1样式的引用。我们通常使用A1样式的引用,因此本文介绍参数a1省略情况下,indirect函数的用法。
如下图所示,在D1单元格输入公式:=INDIRECT(B1),公式返回的结果为“abc”。B1单元格的数据是“B2”,因此INDIRECT(B1)=INDIRECT("B2")。而indirect函数将参数中的文本字符串视为对单元格的引用,因此“=INDIRECT("B2")”,实质就是“=B2”,最终返回B2单元格的值“abc”。
上面的小例子是为了帮助我们理解indirect函数。如果我们需要获得B2单元格的值,在D1单元格直接输入公式“=B2”即可,没有必要使用indirect函数。
indirect函数是一种间接引用函数,很多情况下,我们直接引用单元格或区域即可,不需要使用indirect函数。那么什么时候使用indirect函数呢?indirect函数通常用于,函数公式不变,但引用区域需要变化的情形。接下来我们就介绍需要使用indirect函数的三种情形。
1
锁定引用的单元格
如下图所示,要求计算B2:B8单元格的合计销售额。
在B9单元格输入公式:=SUM($B$2:$B$8)
在C9单元格输入公式:=SUM(INDIRECT("C2"):C8)
B9、C9单元格的公式返回的结果相等,均为“270”。
当新增一行数据时,原来B9单元格的公式下移一行,变为B10单元格的公式,且公式自动修改为“=SUM($B$3:$B$9)”,公式返回的值不变。
原来C9单元格的公式下移一行,变为C10单元格的公式,公式返回的值变化了,增加了新增一行的值。
在C10单元格的公式中,INDIRECT("C2")锁定C2单元格,SUM函数的求和区域必须从C2单元格开始。因此在原来的第2行数据前面新插入一行数据时,SUM+INDIRECT函数会将新增数也计算在内。
2
引用不同的工作表
如下图所示,“1班”、“2班”、“3班”分别为3个班级的分数。
要求在“统计表”的C3单元格统计指定班级的平均分。
如果直接使用average函数计算平均值,如下图所示。在C3单元格输入公式:=AVERAGE('1班'!B:B)。这个公式虽然能正确计算“1班”的平均分,但这个公式有一个缺点。如果我们选择其他班级,比如“2班”,那么就要修改公式,AVERAGE函数需要引用“2班”工作表的B列数据。
如果我们希望在B3单元格指定任意班级,不修改C3单元格的公式,就能计算对应班级的平均分,就需要使用indirect函数。
如下图所示,在C3单元格输入公式:
=AVERAGE(INDIRECT("'"&B3&"'!B:B"))
当B3单元格的班级变化时,C3单元格的值也会变化。
3
引用定义的名称
indirect函数和定义名称一起使用,可以用于制作多级下拉菜单。
如下图所示,在F3单元格选择省份之后,G3单元格的下拉菜单就会出现对应的市。
制作这种联动的下拉菜单需要使用indirect函数。具体操作步骤如下:
(1)选中F3单元格,单击【数据】-【数据验证】,打开【数据验证】对话框。【允许】选择“序列”;【来源】选择A2:D2单元格。
(2)定位名称。选中A2:A6单元格区域,单击【公式】-【定义的名称】-【根据所选内容创建】,在弹出的对话框中,勾选【首行】。这样就将单元格区域A3:A6命名为“广东省”。
按照同样的操作方法,依次将其他省份的城市所在单元格区域,以省份命名。
(3)单击选中G3单元格,打开【数据验证】对话框。【允许】选择“序列”。【来源】输入公式:=indirect(F3)
在该公式中,F3单元格指定省份,而indirect函数会将指定的省份视为引用。由于在步骤2中,将各省份所属的市所在单元格区域定义名称为省份,在G2单元格的下来菜单中就会出现对应省份所包括的市。