送人玫瑰,手有余香,请将文章分享给更多朋友
动手操作是熟练掌握EXCEL的最快捷途径!
【置顶公众号】或者【设为星标】及时接收更新不迷路
小伙伴们好,今天和大家分享一则群友提出的问题。题目经过简化后如下。
要求对A列中着色的部分去重后排列。
题目要求很简单,我们该如何操作呢?我们来分析一下这道题目。
首先这肯定是一道提取不重复清单的题目。
其次,这道题目有以下几个特点:
单元格每隔两行间隔;在非着色区域有不同类型的数据干扰,因此,我们总体的思路也就有了。首先要确定不重复数据的范围,其次对着色区域定位,最后按照提取不重复清单的经典应用公式提取清单。
下面我们一起来看看如何书写这个公式。
在单元格C2中输入公式“=IFERROR(INDEX($A$2:$A$23,SMALL(IF(IFERROR((MATCH($A$2:$A$23,$A$2:$A$23,)=ROW($A$2:$A$23)-1),0)*((INT((ROW($A$2:$A$23)-2)/3)+1)=(ROUND((ROW($A$2:$A$23)-1)/3+1,0))),ROW($A$2:$A$23)-1,9^9),ROW(A1))),"")”,三键回车并向下拖曳即可。
思路:
(INT((ROW($A$2:$A$23)-2)/3)+1)部分返回一组序列{1;1;1;2;2;2;3;3;3;4;4;4;5;5;5;6;6;6;7;7;7;8}
同理,(ROUND((ROW($A$2:$A$23)-1)/3+1,0))也返回一组序列{1;2;2;2;3;3;3;4;4;4;5;5;5;6;6;6;7;7;7;8;8;8},两组序列相同位置的部分就是源数据中着色的部分
除此之外,我们还要将着色部分中的重复值去掉。这里使用MATCH=ROW的方法。这部分的结果是{TRUE;TRUE;TRUE;TRUE;TRUE;#N/A;TRUE;#N/A;#N/A;FALSE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE},这组序列中有三个地方有错误值,会影响到后面的计算结果,因此用IFERROR函数屏蔽错误值,最终这部分的结果为{TRUE;TRUE;TRUE;TRUE;TRUE;0;TRUE;0;0;FALSE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE}
上述两部分条件相乘的结果是{1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1},条件为真时返回对应行号,为假时返回一个极大值9^9
下面的就很简单了,不用再详细介绍了。
可是上面的这个公式有些冗长,我们看看能不能精简一下啊!仔细观察一下源数据,我们发现着色部分的排列规律是在“1,2,3,1,2,3,1,2,3”这个结构中“1”的位置上的。因此我们只需要提取“1”这个位置上的数据即可。这样,上面这个公式可以精简如下。
在单元格C2中输入公式“=IFERROR(INDEX($A$2:$A$23,SMALL(IF(IFERROR((MATCH($A$2:$A$23,$A$2:$A$23,)=ROW($A$2:$A$23)-1),0)*(MOD(ROW($A$2:$A$23)-1,3)=1),ROW($A$2:$A$23)-1,9^9),ROW(A1))),"")”,三键回车并向下拖曳即可。
整体的思路还是一样的,只不过我们用“MOD(ROW($A$2:$A$23)-1,3)=1”来替代了“((INT((ROW($A$2:$A$23)-2)/3)+1)=(ROUND((ROW($A$2:$A$23)-1)/3+1,0)))”这部分。整个过时立刻看起来阅读性更强了。
还能不能再精简一下呢?由于着色部分只出现在“1”的位置上,和其它数据都没有关系。因此我们也不需要用MATCH=ROW这个技巧了。只需要直接提取“1”位置上所对应的数据,再利用COUNTIF函数,去除在本列中已经出现的数据就好了!
在单元格C2中输入公式“=IFERROR(INDEX($A$2:$A$23,MIN(IF((MOD(ROW($A$2:$A$23)-1,3)=1)-COUNTIF($C$1:C1,$A$2:$A$23),ROW($A$2:$A$23)-1,9^9))),"")”,三键回车并向下拖曳即可。
思路:
利用IF函数,提取满足条件“MOD(ROW($A$2:$A$23)-1,3)=1”时对应位置的行号
又因为要去除已经出现的数据,利用COUNTIF($C$1:C1,$A$2:$A$23)这个技巧去除已出现数据
由于出现过的数据都已经被移除了,每次需要提取的新的数据所在位置肯定是最小的,因此将SMALL函数改为MIN函数
其余和前面的思路是一样的。
-END-
我就知道你“在看”
联系客服