excel公式:提取出不重复数值

公式是=INDEX(D:D,SMALL(IF(MATCH(D$1:D$1000&"",D$1:D$1000&"",)=ROW($1:$1000),ROW($1:$1000... 公式是 =INDEX(D:D,SMALL(IF(MATCH(D$1:D$1000&"",D$1:D$1000&"",)=ROW($1:$1000),ROW($1:$1000),4^8),ROW(2:2)))&""。。没看明白为什么这样写?每个公式代表的意思我知道,但是组合起来看的糊里糊涂的!求各位大神指点 展开
 我来答
byl341010202
2014-03-23 · TA获得超过2195个赞
知道大有可为答主
回答量:2860
采纳率:0%
帮助的人:2414万
展开全部

这个提问很有意思,要理解这个公式,不妨把问题再简化一下:

如图,在E1输入如下数组公式(用Shift+Ctrl+Enter输入):
=INDEX(D:D,SMALL(IF(MATCH(D$1:D$20&"",D$1:D$20&"",)=ROW($1:$20),ROW($1:$20),4^8),ROW(1:1)))&""
下拉
用鼠标在编辑栏把MATCH(D$1:D$20&"",D$1:D$20&"",)变成高亮,如下图:

按F9,得下图:

其中{1;2;2;4;2;2;2;1;2;1;4;2;1;4;15;2;4;4;1;4}就是公式MATCH(D$1:D$20&"",D$1:D$20&"",)的计算结果,它表示数组D$1:D$20={3;5;5;2;5;5;5;3;5;3;2;5;3;2;4;5;2;2;3;2}的每一项的数字在数组中第一次出现的位置。例如3;5;5;2对应1;2;2;4等等。
ROW($1:$20)={1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20}
MATCH(D$1:D$20&"",D$1:D$20&"",)=ROW($1:$20)返回如下逻辑数组(可用按F9得到):
{TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE}它反映数组D$1:D$20中某数字第一次出现的位置,TRUE为第一次出现,FALSE则不是。
IF(MATCH(D$1:D$20&"",D$1:D$20&"",)=ROW($1:$20),ROW($1:$20),4^8)则构造了如下数组(可用按F9得到):
{1;2;65536;4;65536;65536;65536;65536;65536;65536;65536;65536;65536;65536;15;65536;65536;65536;65536;65536}
它是当D$1:D$20中的数字在D$1:D$20中第一次出现时,返回它的行号,否则返回一个很大的数65536
SMALL(IF(MATCH(D$1:D$20&"",D$1:D$20&"",)=ROW($1:$20),ROW($1:$20),4^8),ROW(1:1))则返回上述数组的最小值
公式下拉后
SMALL(IF(MATCH(D$1:D$20&"",D$1:D$20&"",)=ROW($1:$20),ROW($1:$20),4^8),ROW(2:2))则返回上述数组的第二小值
如此等等。
于是INDEX(D:D,SMALL(IF(MATCH(D$1:D$20&"",D$1:D$20&"",)=ROW($1:$20),ROW($1:$20),4^8),ROW(1:1)))&""
在E列依次列出了D列中第一次出现的数,下拉到出现空格,则E列列出了D列全部的不重复数。

琴俊贺楼Rl
2014-03-23 · TA获得超过4721个赞
知道小有建树答主
回答量:1174
采纳率:57%
帮助的人:366万
展开全部
这是一个典型的按小到大排序的函数。
当然,分解任何公式都得从内而外,这个也不例外。
1、MATCH(D$1:D$1000&"",D$1:D$1000&"",)

在D1至D1000的范围连上“”,查找D1至D1000“”

2、IF(MATCH(D$1:D$1000&"",D$1:D$1000&"",)=ROW($1:$1000),ROW($1:$1000),4^8)

如果第1项返回的行号 等于 1至1000中的数字,就返回这些行号,否则就返回4^8(即65536)

3、SMALL(第2项公式,ROW(2:2)))

(注:你这里是ROW(2:2),上面一条公式应该有ROW(1:1))
这条公式明显是要向下填充的,SMALL(……,ROW(2:2)))意思就是,往下填充的时候,从第2项得到的数组中分别取出第1小、第2小、第3小……的数字。

4、INDEX(D:D,第3项公式)

公式下拉填充的时候,顺序插入D列所对应该的第3项取出来的行号。
比如:第三项分别取出了2、3、5、6、7,这里就是插入D列的第2行、第3行、第5行、第7行、第7行

总结:这就相当于一个按顺序排序或者叫做筛选的函数公式。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朱仕平
2014-03-23 · 知道合伙人软件行家
朱仕平
知道合伙人软件行家
采纳数:7872 获赞数:29182
15年质量管理经验, 5年EXCEL培训经验, 目前专职EXCEL网络教育和企业培训

向TA提问 私信TA
展开全部
选择每一段公式, 然后按下F9查看公式结果, 就知道它的运算过程了
也可以使用审阅公式的功能
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式