你懂不懂数组这个概念,如果不懂,下面基本可以不用看,先去了解下数组的概念
至于MATCH,INDEX,COUNTIF的用法,参考EXCEL提供的帮助文件(打开EXCEL,按F1查找就有),里面很详细了,有例子和解释,这里就不多废话了
我就分析这个公式,从里面往外(公式的运算顺序也是从里到外),先COUNTIF,然后MATCH,最后才是INDEX。
COUNTIF($S$1:S1,$A$2:$A$2672)这个是在统计在$S$1:S1这个不定区域$A$2:$A$2672中出现的次数,没出现的就是0,这样就形成一个不断变化的数组
用利用MATCH(0,数组,0)这个找到数组中第一个0出现的位置,(假设这个数字为X,是S列中还没有引用出来的其中一个单元格的行序号)
最后用INDEX(单元格区域,上面用match得到的数字作为行数)返回单元格区域$A$200:$A$3453中第X行
=INDEX($A$200:$A$3453,MATCH(0,COUNTIF($S$1:S1,$A$2:$A$2672),0))
=INDEX($A$200:$A$3453,MATCH(0,{一个由0和其它非0数字组成的数组},0))
=INDEX($A$200:$A$3453,X)
=A(200+X-1)
如当你在S2输入这个公式的时候,由于$S$1:S1没有任何内容,COUNTIF($S$1:S1,$A$2:$A$2672),就会返回{0,0,0,0,……}的数组
然后MATCH(0,{0,0,0,0,……},0)返回1
INDEX($A$200:$A$3453,1)就会返回A200这个单元格
当你下拉的时候,就有两种情况,
一、A200≠A201
$S$1:S2里面已经有了A200,COUNTIF($S$1:S2,$A$2:$A$2672)这时返回的是{1,0,0,0,0……}
MATCH(0,{0,0,0,0,……},0)返回2,INDEX($A$200:$A$3453,2)就会返回A201这个单元格
二、A200=A201,A201≠a202
同样
$S$1:S2里面已经有了A200,而因为A200=A201,COUNTIF($S$1:S2,$A$2:$A$2672)这时返回的是{1,1,0,0,0……}
MATCH(0,{1,1,0,0,0,……},0)返回3,INDEX($A$200:$A$3453,3)就会返回A202这个单元格
index函数,它的作用是返回指定区域的某行某列的值。
函数MATCH
这是一个查找类函数,返回找到的对象的位置,用数值表示。
函数共有三个参数:
参数1:是要找的内容,包括数字、文本或逻辑值,或包含这些值的单元格引用。
参数2:要查找的区域,必须是一列或一列连续的单元格区域。
参数3:查找时比较的匹配方式。省略时默认为1。
1,表示在区域中找小于或等于参数1的最大值的位置,但要得到正确值,参数2区域必须升序排列。
0,表示在区域中找跟参数1完全一样的第一个值的位置,如果找不到返回错误值。如果为0且参数1为文本,则参数1可以包含通配符、星号 (*) 和问号 (?)。星号可以匹配任何字符序列;问号可以匹配单个字符。
-1,表示在区域中找大于或等于参数1的最小值的位置,同理,此时参数2的区域必须降序排列,否则结果可能错误。
举列:=match(2,A1:A10,0) 表示:在区域A1:A10中以完全匹配的方式查找2,如果找到就返回该值在A1:A10区域中的位置,即从上往下第几个。如果A1到A10分别为1-10,那么得到2。
COUNTIF函数是计算在区域中,满足条件的单元格的区域
此公式的意思是先通过COUNTIF函数计算在指定s列区域中值为$A$2:$A$2672的区域,以此区域作为match第二个参数的区域,计算值为0的第一个单元格位置,并以此值作为index函数第二个参数,计算$A$200:$A$3453区域中的,第二个参数值的行的值。
index函数,它的作用是返回指定区域的某行某列的值。
比如说公式为“=countif(A1:A100,B1)”,意思就是,在A1到A100这个范围内,等于B1值的个数。
如果写成“=countif(A1:A100,50)”,意思就是,在A1到A100这个范围内,等于50的个数
match函数一共有三个参数,首先我们来看第一个参数lookup_value,含义:需要在数据表(lookup_array)中查找的值。接着我们来看第二个参数lookup_array,含义:可能包含有所要查找数值的连续的单元格区域。第三个参数match_type,含义:排列顺序,一共有三个值,1代表升序排列,0代表任意顺序排列,-1代表降序排列。其中第一个和第二个必选参数,第三个为可选参数,默认为1。