工作中经常遇到:将一组数据(行或列)的不重复数据筛选出后(即重复数据只显示一次,其余不显示),并按升/降序排列,将筛后结果显示在另一行/列中。 以上问题的解决方法很多,如高级筛选,数据透视表等等。今天我主要从利用count()、FREQUENCY()及small()或large()函数进行解决,有时既便有朋友把公式列出来但问其意义不乏其人,故在此顺便解释一下各关键字句的意义,文中有不妥之处请大虾们指点,不胜感激,同时也希望达到抛砖引玉的效果。 若原数据在A1:A22(22个数据中有许多重复数据),要求按22个数据中筛选出不重复数据列在C列中, 那么{C1:C22=IF(ROW()>COUNT(1/FREQUENCY(A1:A22,A1:A22)),"",SMALL(IF(FREQUENCY(A1:A22,A1:A22),A1:A22),ROW()))} 首先,不难看出这是个数组公式。 其次,FREQUENCY(A1:A22,A1:A22),是返回A1:A22数组中各数据出现的频率,也以数组显示出,即在A1:A22中,<=A1有多少个,>A1且=<A2有多少个……。 第三,COUNT(1/FREQUENCY(A1:A22,A1:A22)),是统计返回频率数组中不为0的个数,即有效个数,因FREQUENCY(A1:A22,A1:A22)结果有0值,那么1/FREQUENCY(A1:A22,A1:A22)的结果当然是错误了(大家知道,0不能作除数)。另外countif()也有类似同样效果。 第四,若IF()第一个条件满足,也就是说,所在单元格的行号大于这个数,就为空值。不难理解,假设一组数有10个数据,其中有2个重复,则只有8个有效唯一数值,根据当初的要求,当然从第9行及以后的行中单元格为空了。 第五,SMALL()函数据就是把筛选出来的数据从小到大排列,若要从大到小排列就用large()函数。 最后,若数据已经以行显示出来,欲转换为列显示出来,可用TRANSPOSE()进行转换,或用复制>选择性粘贴>转置。 详见附件:
AXUysbRF.rar
(7.57 KB, 下载次数: 915)
|