案例:如何用Excel的高级筛选功能选出不重复的单词?
自从数据冰山回答了这个问题:Excel到底有多厉害?粉丝都按捺不住了,各种留言和私信:求教程!求培训!下面这位同学的问题就很有代表性嘛,我们一起来看看怎么解决,大家顺便也get一些实用的小技能,来提高工作效率吧:)
如图,将单词A当中那些和单词B重复了的单词筛选掉,有两点需要注意:一个是要整体相同才算,部分相同不用筛选掉;二是不必在同一行,比如B3和C5一样,也算重复,要把B3去掉。
解决这个问题可以拆分成几个步骤:
1, 为了后续编写函数方便,现将B3-B9定义为 “wordA”,C3-C9定义为 “wordB”,D3-D9定义为 “Number”。方法是选定B3-B9后右键选择“定义名称”,然后在名称那里写上“wordA”,点击确定即可,其余同理;
2, 首先用MATCH函数将wordB中与wordA里相同的单词筛选出来,输入“=MATCH(B3,wordB,0)”。按下图Excel提示,lookup_value即要查找的对象B3也就是DOG,lookup_array即要查找的范围也就是数组wordB,match_type选0即精确匹配。
其余下拉即可,得到下图。3表示在wordB里的第三个找到了匹配的,可以看到没有匹配的系统都报错。
3, 用ISERROR函数,ISERROR 值为任意错误值(#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME? 或 #NULL!)时,返回TRUE否则返回FALSE。这样将有匹配和没有匹配的分别归类,参考下图
下拉后整理为
4, 后面的任务就是将TRUE的单词都筛选出来,按照原来的顺序依次排列。首先,要将它们在wordA里的顺序提取出来,这里可以用到IF函数。IF是判断是否满足某个条件,满足的话返回一个值,不满足返回另一个值。以H3为例,为TRUE时,返回它在单词A里的序号,为FALSE时,返回空。
5, 之后可以用SMALL函数将数值依次排列起来,SMALL(Array,K)即返回数组Array中第K个最小值。这里是将I3到I9数组里按照第一小,第二小,第三小,依次排列。
6, 最后就可以用INDEX函数,按照row J里的数字对应的次序将wordA里的单词返回。这样就筛选出了没有重复出现的单词。
7, 如果用一个总函数来写,就是=INDEX(wordA,SMALL(IF(ISERROR(MATCH(wordA,wordB,0)),ROW(wordA)-2),ROW(A1)))
下载本案例请戳:案例1-文图