请教筛选公式数组含义=INDEX(A:A,SMALL(IF(MATCH...
要用excel做个筛选公式,在网上查到一个,但不知含义,请高手解释之=INDEX(A:A,SMALL(IF(MATCH($A$1:$A$7&$B$1:$B$7&$C$1:...
要用excel做个筛选公式,在网上查到一个,但不知含义,请高手解释之
=INDEX(A:A,SMALL(IF(MATCH($A$1:$A$7&$B$1:$B$7&$C$1:$C$7,$A$1:$A$7&$B$1:$B$7&$C$1:$C$7,)=ROW($1:$7),ROW($1:$7)),ROW(4:4)))
有大量数据,多行多列。如果同时有多行数据相同,只是如何用公式实现筛选删除相同数据 展开
=INDEX(A:A,SMALL(IF(MATCH($A$1:$A$7&$B$1:$B$7&$C$1:$C$7,$A$1:$A$7&$B$1:$B$7&$C$1:$C$7,)=ROW($1:$7),ROW($1:$7)),ROW(4:4)))
有大量数据,多行多列。如果同时有多行数据相同,只是如何用公式实现筛选删除相同数据 展开
2个回答
展开全部
这个公式要解释起来很费劲,我试试
index+small+match+row函数通常用来对某列的数据进行去重处理.
你粘贴的公式最后的参数是row(4:4),应该不是处于第一个位置的公式,第一个公式应该是row(1:1)
把你的公式简化一下方便解释
=INDEX(A:A,SMALL(IF(MATCH($A$1:$A$7,$A$1:$A$7,)=ROW($1:$7),ROW($1:$7)),ROW(1:1)))
我们假设你A1:A7中存放的是A B B A C D B
公式执行顺序为:
1,MATCH($A$1:$A$7,$A$1:$A$7,) 在A1到A7中分别查找A1:A7第一次出现的位置得到 {1,2,2,1,5,6,2},
2,MATCH($A$1:$A$7,$A$1:$A$7,)=ROW($1:$7),上面得到的数组与 {1,2,3,4,5,6,7}进行对比,相同为ture 不同为false得到新的逻辑数组{ture,ture,false,false,ture,ture,false}
3,IF(MATCH($A$1:$A$7,$A$1:$A$7,)=ROW($1:$7),ROW($1:$7)),根据上面的逻辑数组,为ture返回对应位置的行号,否则返回false 得到新数组 {1,2,false,false,5,6,false}
4,SMALL(IF(MATCH($A$1:$A$7,$A$1:$A$7,)=ROW($1:$7),ROW($1:$7)),ROW(1:1)) 用small函数返回数组中第1小的数字1(公式下拉时会返回第2小,第3小 第4小的数字),逻辑值false是不会参与返回的
5,=INDEX(A:A,SMALL(IF(MATCH($A$1:$A$7,$A$1:$A$7,)=ROW($1:$7),ROW($1:$7)),ROW(1:1))) 最后用index返回A列对应最小数字行号的数据1 2 5 6行对应的A B C D
当然公式继续下拉会返回错误值,另外有解决办法,这里就不说了.
总之这样就达到了去重的目的
至于你原公式中$A$1:$A$7&$B$1:$B$7&$C$1:$C$7,只是把ABC3列结合为1列来进行去重,道理和上面说的是一样的.
index+small+match+row函数通常用来对某列的数据进行去重处理.
你粘贴的公式最后的参数是row(4:4),应该不是处于第一个位置的公式,第一个公式应该是row(1:1)
把你的公式简化一下方便解释
=INDEX(A:A,SMALL(IF(MATCH($A$1:$A$7,$A$1:$A$7,)=ROW($1:$7),ROW($1:$7)),ROW(1:1)))
我们假设你A1:A7中存放的是A B B A C D B
公式执行顺序为:
1,MATCH($A$1:$A$7,$A$1:$A$7,) 在A1到A7中分别查找A1:A7第一次出现的位置得到 {1,2,2,1,5,6,2},
2,MATCH($A$1:$A$7,$A$1:$A$7,)=ROW($1:$7),上面得到的数组与 {1,2,3,4,5,6,7}进行对比,相同为ture 不同为false得到新的逻辑数组{ture,ture,false,false,ture,ture,false}
3,IF(MATCH($A$1:$A$7,$A$1:$A$7,)=ROW($1:$7),ROW($1:$7)),根据上面的逻辑数组,为ture返回对应位置的行号,否则返回false 得到新数组 {1,2,false,false,5,6,false}
4,SMALL(IF(MATCH($A$1:$A$7,$A$1:$A$7,)=ROW($1:$7),ROW($1:$7)),ROW(1:1)) 用small函数返回数组中第1小的数字1(公式下拉时会返回第2小,第3小 第4小的数字),逻辑值false是不会参与返回的
5,=INDEX(A:A,SMALL(IF(MATCH($A$1:$A$7,$A$1:$A$7,)=ROW($1:$7),ROW($1:$7)),ROW(1:1))) 最后用index返回A列对应最小数字行号的数据1 2 5 6行对应的A B C D
当然公式继续下拉会返回错误值,另外有解决办法,这里就不说了.
总之这样就达到了去重的目的
至于你原公式中$A$1:$A$7&$B$1:$B$7&$C$1:$C$7,只是把ABC3列结合为1列来进行去重,道理和上面说的是一样的.
追问
十分感谢你的回答,真是佩服,你写的我差不多能看懂的,还有一个问题,如果我要筛选的数据有很多列(A——T)筛选的时候A-N列看做整体,“$A$1:$A$7,$A$1:$A$7,”这部分就要很长的写出来么,有没有什么简便的方法?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询