上次的教程讲的是面对一组排过序的有很多重复项的数据,实现去重后紧密排序 , 从而可以用于下拉菜单 。评论区有人问道:如果数据是乱序呢?答案是当然可以 。本篇教程就来教大家方法 。
【Excel中不用VBA也能实现:乱序数据去掉重复项后排序】相比排过序的数据,乱序的数据处理起来稍微复杂一些,共分成五个步骤:

图1:五步骤
第一步:归类
首先需要将相同的数据表示出来,比如“财务部”,要将同为“财务部”的行标记为一个数字 , 这就实现了同值数据的归类 。公式如下:
=MATCH(B4,B:B,0)-3
其中MATCH函数用于确定“B列”每行数据在该列第一次出现的行号,减3是用于将序号调整为从1开始 。
第二步:去重
在第一步得到的“F列”的基础上,按顺序找到第一次出现的位置,就能实现去重 。公式如下:
=IF(ISNA(MATCH(E4,F:F,0)),"",INDEX(B:B,MATCH(E4,F:F,0)))
其中ISNA函数用于判断是否找到匹配,如没有则显示空置,这样就避免显示“N/A”这类的乱码 。
第三步:填充
第二步的结果有个问题,就是数据之间会有空行,因此需要给数据重新编号 , 在编号前需要先把空白行填充数据 。公式如下:
=IF(G4<>"",G4,H3)
第四步:紧密编号
“F列”的编号会有跳跃,本例中2就跳到了4,之间空了一个3 , 因此需要进行紧密编号,即“1、2、3”这样的顺序 。有人可能对第三步的操作有些困惑 , 看完第四步就清楚了 。第四步在“H列”的基础上重新编号,就能得到紧密的编号 。公式如下:
=IF(H4<>H3,I3 1,I3)
第五步:紧密排序
这一步跟上一篇教程就很接近了 , 针对排过序的数据进行紧密排序 。公式如下:
=IF(ISNA(MATCH(E4,I:I,0)),"",INDEX(H:H,MATCH(E4,I:I,0)))
用INDEX与MATCH配合按照顺序在“I列”取数,就能实现紧密排序 。ISNA的作用不再赘述 。
至此 , 我们就实现了最终的目标 。由于不使用VBA,就需要对原始数据进行多道工序的处理,这当中每一步的思路很重要 。在本案例中 , 大思路其实就两步:先识别同值数据然后去重,再去掉数据间的空白行 。
需要更多实用教程,请关注“四句话管理” 。
(关注我后发私信“去重工具”,可获得本文及上一篇教程中用到的excel原始表)
