由于需要动态生成一些比较有规律的计算公式,特意研究了下INDIRECT这个函数。感觉略有收获,趁着记得还比较清晰在这里记录下。
语法: INDIRECT(ref_text,[a1])
要使用这个函数主要记住以下两点就可以轻松掌握:
- 函数的参数:单元格名称或符合单元格地址格式(A1,$A$1,etc.)的字符串
- 函数的返回值:参数所指定的单元格的值
下面将以下图为例对函数参数进行简单的说明,其中我们将B2单元格的名称设定为TEST:
- 直接指定单元格地址:=INDIRECT(“A4”),这时会返回值”A3”。因为参数给定的既是字符串也符合单元格地址格式,所以直接对参数代表的单元格进取引用取值。
- 隐式指定单元格地址:=INDIRECT(A4),这个时候会返回值”3”,也就是A3单元格的值。因为参数指定的是A4,在这里A4是一个单元格的地址而非字符串,所以要取出单元格A4的值(也就是字符串”A3”),然后对拿到的地址(A3)进行取值得到”3”。为了加深理解可以将公式改为=INDIRECT(A2),这个时候公式就会返回#REF!错误,因为单元格A2的值是”2”,而不存在一个地址为2的单元格,所以会报错。
- 通过公式或者连接符得到单元格地址:=INDIRECT(B1&A3),这时会返回值”3”。虽然公式中参数有&链接,但参数仍不是字符串,更不是单元格地址或者名称,首先要做的就是将参数转化成字符串格式的地址或者名称。B1的值是”A”,A3的值是”3”,通过&连接后得到字符串”A3”,因此公式也就转化成了=INDIRECT(“A3”),这样就会得到A3单元格的值。同样也可以在指定参数的时候指定单元格的列标或者行标,如:=INDIRECT(“A”&A3),=INDIRECT(B1&”3”),=INDIRECT(B1&”$3”),=INDIRECT(“$A”&A3)都是要读取A3单元格的值,也都会返回”3”。
- 使用单元格名称:=INDIRECT(A5),会返回”B”,也就是B2单元格的内容。与前面一样,将A5转换成单元格名称的字符串”TEST”,然后取得”TEST”所代表的单元格的值,即”B”。与=INDIRECT(“TEST”)等价。
怎么样,只要抓住要点这个函数瞬间变得很轻松了吧。