上次咱们说到一个公式=SUM(LARGE(B:B,ROW(INDIRECT("1:"&H2)))),其中的ROW(INDIRECT("1:"&H2))这部分如果写成ROW(1:H2)就会报错:
原因也告诉大家了,就是ROW函数的参数只能使用单元格或单元格区域。
因此解决的办法就是如何使1:H2成为一个有效的单元格区域,要想实现这个目的,就需要用到INDIRECT函数,下面我们来介绍这个函数的用法。
INDIRECT的用法其实很简单,一句话就说完了:将表示地址的字符串作为INDIRECT函数的参数,可以直接得到该地址中的数据,表示地址的字符串必须置于引号内。
通过两个例子来说明这句话的含义:
例一、 在公式=INDIRECT("A1")中,A1可以表示一个单元格,加引号后作为INDIRECT的参数,效果与=A1是一样的。
例二、 在公式=SUM(INDIRECT("A1:A3"))中,INDIRECT("A1:A3")与A1:A3的意义相同,表示这个单元格区域。
以上两个例子中,地址都是固定不变的,也许大家会觉得用了INDIRECT有点多此一举,接下来再看一个区域不固定的例子。
使用公式=SUM(INDIRECT("A1:A"&B1))可以实现一个动态区域求和的效果:
注意到这个公式中,求和范围是从A1开始的,但是结束位置不确定,是通过B1单元格的数字来确定的。
"A1:A"&B1显然不能表示一个单元格区域,但是随着B1单元格中数据的变化,"A1:A"&B1就能表示“A1:A2”,“A1:A5”等等。
如果这个例子看明白的话,文章开头的问题就好理解了,"1:"&H2虽然不能表示一个单元格区域,但是INDIRECT("1:"&H2)却可以表示“1:3”,“1:5”等等。(两个数字中间加冒号可以表示第几行到第几行之间的单元格区域)
因此ROW(1:H2)是错误的,而ROW(INDIRECT("1:"&H2))就没问题了。
到这里,咱们上一次遗留的问题算是告一段落了。
可是细心的朋友也许会注意到,在使用INDIRECT函数的时候,参数有时候加引号,有时候没加引号,有时候还需要&这个连接符,这其中有什么讲究吗?
其实要用好这个函数,关键点的确是对引号的理解。
INDIRECT函数的参数如果不加引号,那么参数表示的单元格中必须是一个可以表示地址的内容。
例如,A10单元格中的内容为A1,公式=INDIRECT("A10")的结果等同于=A10,即返回数据“A1”;而=INDIRECT(A10)则等同于=A1,结果是A1单元格中的数据“8”。
这个例子需要自己多思考,理解加引号和不加引号的区别,这个坎才能过去。
至于什么时候用连接符&,也有一个判断标准,那就是为了构造出一个合法的地址,可能会用到常量(字母、数字和符号),也可能会用到变量(主要指单元格)。
例如在本文前面提到的例子中,表示单元格区域的地址“A1:A3”就用到了常量,其中有字母A,数字1和3,以及冒号。
如果要让这个地址的范围能够通过某个单元格的值来确定,就需要加入变量。
例如"A1:A"&B1,其中B1就是变量,这个单元格区域具体是什么,那就要看B1单元格中的数字了。
还有更加复杂的情况,让单元格区域的开始和结束位置都用变量来表示,例如"A"&B1&":A"&B2,在这个表示方法中,单元格开始位置由B1单元格中的数字来确定,结束位置由B2单元格中的数字来确定。
常量需要加引号,变量不加引号,常量和变量使用&进行连接。
因此要想用好INDIRECT函数,不仅仅需要非常牢固的基础知识,也需要对“地址”有非常清晰的认识才行,函数本身真的不是很难。