|
假设 A1:A14数据如下:
9
2
3
7
10
10
2
9
8
5
2
4
9
5
首先你拿的是第2个单元格的公式,第1个公式应该把ROW(A2) 改成 ROW(A1),如下:
=INDEX(A:A,SMALL(IF(MATCH(A$1:A$14,A:A,)=ROW($1:$14),ROW($1:$14),99),ROW(A1)))&""
建议把所有的“A:A”改成数据单元格区域“$A$1:$A$14”,以便分析数据
=INDEX($A$1:$A$14,SMALL(IF(MATCH(A$1:A$14,$A$1:$A$14,)=ROW($1:$14),ROW($1:$14),99),ROW(A1)))&""
使用wps查看函数范围时,只要单击一个函数的圆括号“()"内参数任意字符位置,该函数的函数名称和左右圆括号都将加粗显示,可以很明显看出一个公式中当前函数的范围,这样便于分析函数。excel好像没有这个功能,至少excel 2004没有这个功能,excel虽然有括号配对标记相同的颜色,但是当函数过多时,这个颜色很难区分,不如wps表格醒目。
分析最外层的INDEX函数,可以发现该函数有两个参数,即=INDEX(数组,行序号)
数组参数为:$A$1:$A$14
行序号为:SMALL(IF(MATCH(A$1:A$14,$A$1:$A$14,)=ROW($1:$14),ROW($1:$14),99),ROW(A1)),一眼看不出来,可以慢慢分析。
现在分析行序号:SMALL(IF(MATCH(A$1:A$14,$A$1:$A$14,)=ROW($1:$14),ROW($1:$14),99),ROW(A1))
对于SMALL函数,有两个参数,即=SMALL(数组,k)
数组参数为:IF(MATCH(A$1:A$14,$A$1:$A$14,)=ROW($1:$14),ROW($1:$14),99),一眼看不出来,可以慢慢分析。
k=ROW(A1)=1,表示提取数组中第1个最小的值。
现在分析数组参数为:IF(MATCH(A$1:A$14,$A$1:$A$14,)=ROW($1:$14),ROW($1:$14),99)
对于IF函数,这里有3个参数,=IF(条件表达式,真值,假值)
条件表达式:MATCH(A$1:A$14,$A$1:$A$14,)=ROW($1:$14)
真值:ROW($1:$14)
假值:99
现在分析条件表达式:MATCH(A$1:A$14,$A$1:$A$14,)=ROW($1:$14)
左边:
=MATCH(A$1:A$14,$A$1:$A$14,)
=MATCH({9;2;3;7;10;10;2;9;8;5;2;4;9;5},{9;2;3;7;10;10;2;9;8;5;2;4;9;5},) ,其作用是判断A$1:A$14这14个数字,在A$1:A$14单元格区域中分别排序第几位。注意,这里单元格区域转换为数组值,按下F9将无法计算,这里是为了分析数据
={1;2;3;4;5;5;2;1;9;10;2;12;1;10} 结果是数组,比如A1=9,在A1:A14,单元格区域中是第1个数,而A8=9,但是MATCH函数值找到第1个符合要求的就不找了,所以对应的结果也是1,这样重复的数字返回的序号都是相同的。
右边:ROW($1:$14)={1;2;3;4;5;6;7;8;9;10;11;12;13;14}
结合起来
MATCH(A$1:A$14,$A$1:$A$14,)=ROW($1:$14)
{1;2;3;4;5;5;2;1;9;10;2;12;1;10}={1;2;3;4;5;6;7;8;9;10;11;12;13;14},判断两遍数组各自对应位置的数值是否相等
{TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE} ,这样所有第2、3……个重复的数字结果中都显示未FALSE
带回if函数
=IF(MATCH(A$1:A$14,$A$1:$A$14,)=ROW($1:$14),ROW($1:$14),99)
=IF({TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE} ,ROW($1:$14),99)
=IF({TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE} ,{1;2;3;4;5;6;7;8;9;10;11;12;13;14},99)
={1;2;3;4;5;99;99;99;9;10;99;12;99;99} ,这样所有第2、3……个重复的数字对应的序号都是99
将if结果带回small函数
=SMALL(IF(MATCH(A$1:A$14,$A$1:$A$14,)=ROW($1:$14),ROW($1:$14),99),ROW(A1))
=SMALL({1;2;3;4;5;99;99;99;9;10;99;12;99;99},ROW(A1))
=SMALL({1;2;3;4;5;99;99;99;9;10;99;12;99;99},1)
=1
将small函数结果带回index函数
=INDEX($A$1:$A$14,SMALL(IF(MATCH(A$1:A$14,$A$1:$A$14,)=ROW($1:$14),ROW($1:$14),99),ROW(A1)))&""
=INDEX($A$1:$A$14,1)&""
=INDEX({9;2;3;7;10;10;2;9;8;5;2;4;9;5},1)&""
=9&""
=9
同理往下拖动,公式ROW(A1) 变为了 ROW(A2)=2,只影响了small函数的返回值,
SMALL({1;2;3;4;5;99;99;99;9;10;99;12;99;99},1)=1
SMALL({1;2;3;4;5;99;99;99;9;10;99;12;99;99},2)=2
SMALL({1;2;3;4;5;99;99;99;9;10;99;12;99;99},3)=3
SMALL({1;2;3;4;5;99;99;99;9;10;99;12;99;99},4)=4
SMALL({1;2;3;4;5;99;99;99;9;10;99;12;99;99},5)=5
SMALL({1;2;3;4;5;99;99;99;9;10;99;12;99;99},6)=10
SMALL({1;2;3;4;5;99;99;99;9;10;99;12;99;99},7)=12
SMALL({1;2;3;4;5;99;99;99;9;10;99;12;99;99},8)=99
SMALL({1;2;3;4;5;99;99;99;9;10;99;12;99;99},9)=99
在代入到index中如下:
INDEX({9;2;3;7;10;10;2;9;8;5;2;4;9;5},1)&""=9
INDEX({9;2;3;7;10;10;2;9;8;5;2;4;9;5},2)&""=2
INDEX({9;2;3;7;10;10;2;9;8;5;2;4;9;5},3)&""=3
INDEX({9;2;3;7;10;10;2;9;8;5;2;4;9;5},4)&""=7
……
INDEX({9;2;3;7;10;10;2;9;8;5;2;4;9;5},99)&""=“” 因为只有14个数,取第99个数,无引用数据,&“”,最后返回空值
|
|