登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

朱振刚 日记

色谱仪,光谱仪,红外线分析器制造

 
 
 

日志

 
 

数组实例 去重复值  

2013-07-27 13:35:26|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一.公式

=IF(SUM(1/COUNTIF($C$13:$C$25,$C$13:$C$25))>=ROW(A1),INDEX($C$13:$C$25,SMALL(IF(MATCH($C$13:$C$25,$C$13:$C$25,0)=ROW($C$13:$C$25)-12,ROW($C$13:$C$25)-12,""),ROW(A1))),"")

二.公式解释

a)          怎样算出重复值区域的唯一值有多少个

也就是重复的算一次,要得到一个这样的结果,这样我们下拉到公式到后面时就就会报错,不然公式向下填充公式时会报错,Countif这个函数是按件统计单元格的个数,以前我们没有学数组之间是一个一个去统计,现在我们把Countif函数第二以放一组进去统计,当然得到结果也是一组数{2;1;2;2;1;1;2;1;2;2;2;2;1},然后用1除以它们1/ {2;1;2;2;1;1;2;1;2;2;2;2;1},这样又得到一个新数组

{0.5;1;0.5;0.5;1;1;0.5;1;0.5;0.5;0.5;0.5;1},出现3次就会有3个三分之一,3个三分之一相加就得到1,最后用Sum求各得到结果是9,也就是这个区域有9个人名。现在我们利用SUM(1/COUNTIF($C$13:$C$25,$C$13:$C$25))>=ROW(A1),这是一个技巧,打个比方我们现在9个唯一值,去掉重复的名字之后还有9个,因为Row(A1)下拉公式时会产生123……,

当到10时,SUM(1/COUNTIF($C$13:$C$25,$C$13:$C$25))>=ROW(A1) 这个就返回False了,9>=10不成立了,所以用了一个if来判断,如果没有超过9行就显示公式,否则就显示空,这样就把公式的错误值屏闭了。

b)         怎样才能找到重复的数据所在的位置

以前我们学过函数Match,在单行,单列查找一个数据的位置,现在我们学了数组,可以拿一组数去它们相应的位置,把光标定位到编辑栏里,把MATCH这个函数涂黑,然后按F 9MATCH($C$13:$C$25,$C$13:$C$25,0),这样我们就会发现,重复的数据并不是显示它们本身的位置,而是显示这个数据第一次出现时的位置,因此我们利用Matchp 这个特性,在它的前面加一个判断if ,如果这个值与它们相应的位置一样,就显示它们的相应的位置号,否则就显示2^202^202007版本的最大行数,为什么还要减12呢?这样就和我们的Match函数找的位置一致,最后通过Small函数来把这组数排序,Small有二个参数,第一个参数就是我们用if判断得到这个数组,第二参数数用Row(A1),当公式下拉时产生了第一小,第二小,第三小……这样之后就把没有重复的数据的位置找到了,等下作为index函数的第二个参数。

c)          怎样把不重复的数据引用出来

index这个函数,这个函数有三个参数,第一参数是数据区域,第二参数指定要返回的数据在那个数据区域的第几行,第三参数是指定要返回数据在那个数据表中的第几列,上面我们已经把index 这个函数的二个参数都解决了,第一个参数重复值数据区域,第三参数输入1,因为只有一列。

d)         公式效果图如图 29

佛山小老鼠说Excel函数 - ExcelHome - 44.png

  评论这张
 
阅读(353)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018