今天介绍一下Indirect函数。这个函数属于特别有用的一个函数,但是很多人并不太了解它的作用。今天我们就详细介绍一下。
INDIRECT函数的工作方式
这个函数的语法特别简单:
INDIRECT(ref_text,[a1])
一般可以不用管第二个参数(缺省即可,表示单元格引用样式),起作用的就是第一个参数。
这个函数的作用就是返回一个引用,这个引用的地址就是第一个参数的文本字符串告诉我们的。
例如:
=INDIRECT("A1")
这个公式返回的是对单元格A1中的引用,显示的是A1中的值
=INDIRECT(A2)
这个公式返回的是对一个地址的引用,这个地址写在A2单元格中。
第一个参数的文本可以是单元格或者单元格区域,以及名称,可以是手工输入的字符串,比如“A1:B20",也可以是其他公式返回的字符串,比如vlookup,或者使用"A" & 20。
需要特别强调一下的是,这个函数返回的是个地址(要么是单元格或者单元格区域,要么是名称),不是一个值。
例如,下面的公式:
=SUM(INDIRECT("A1:A20"))
中INDIRECT("A1:A20")实际上返回的是单元格区域A1:A20,所以该公式等价于”
=SUM(A1:A20)
INDIRECT函数的用法举例
下面我们介绍一些经常用到INDIRECT函数的场景和示例。
利用其他函数生成地址
=SUM(INDIRECT("A1:A"&ROW()))
这个公式是计算A1开始的一列区域的合计,到哪个单元格是根据当前公式所在的单元格的行号决定的,如果公式在C100,那么这个求和区域就是A1:A100。
这里的Row()可以换成其他函数,例如Match返回一个索引位置。
引用其他工作表的地址
=INDIRECT("'[你的Excel文件.xlsx]你的工作表'!你的地址")
这里你的Excel文件,你的工作表,你的地址三部分都可以是动态生成的。
例如:
=INDIRECT("'[" & C1 &"]Sheet1'!A1:A100")
返回的是某个文件的工作表Sheet1的A1:A100区域的引用。这个文件的名字由C1单元格的内容确定。
引用名称
假设,我们有以下数据:
可以定义名称:
就可以根据选择的区域动态求合计:
其实,引用名称还有一个最常见的场景,在做级联下拉列表时,第二个列表必须是:
=INDIRECT(B2)
其中B2是第一个列表,返回的是个字符串,比如“财务部”,于是,这个公式就返回对财务部这个名称的引用(前提是我们必须先定义财务部这个名称)。