上次的教程讲的是面对一组排过序的有很多重复项的数据,实现去重后紧密排序,从而可以用于下拉菜单。评论区有人问道:如果数据是乱序呢?答案是当然可以。本篇教程就来教大家方法。
相比排过序的数据,乱序的数据处理起来稍微复杂一些,共分成五个步骤:
图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原始表)