发布网友 发布时间:2022-04-25 21:56
共1个回答
热心网友 时间:2023-10-15 16:07
由于你提供的数据里面存在一些歧义,首先必须说清楚,从你给出的数据看,你要排序的数据都是整数,没有小数,或者说如果有小数的话,55和2.5是相同的尾数。也许有办法不使用辅助列,但是有了辅助列使得问题更简单,一共使用了两处辅助列,第一个用于取得尾数,第二个用于排序。
一、主要方法是提取尾数,然后尾数乘以10万,再加上列号,最后对出现超过2次的数排序。
1、尾数,使用right()得到尾数,+0是为了得到数字而不是文本,这是必须留下的辅助行
2、列号,使用column()给每个数据加入一个列号,此行最终可删除
3、重复,使用countif()得到重复次数,重复大于1次的,尾数乘以十万加上行号,此行最终可删除
4、排序,使用small()从最小开始逐一排列,首先以尾数、其次以列号决定排序的先后,此行最终可删除
5、得到你想要的,你的例子都是整数
在前五步证明方法可行后,在此基础上改进
6、合并2、3,必须留下的辅助行
7、合并4、5,必须留下的结果行
二、改进后
10、尾数,使用right()得到尾数
11、合并2、3,尾数重复的,尾数乘以10万加上列号
12、合并4、5,将11步的数据排序,并读取原数据展示出来
三、最后结果,简化后的方法可行,就可以将多行合并为一行
之后如果你需要用P列,那么就在P列插入空列,填入你的数据即可。
具体代码如下,已经是最后的结果,直接按照步骤把以下冒号后的代码拷贝到你的文件对应单元格使用即可:
1、C3~i3=11 23 31 45 55 56 57
2、Q3的代码,用于得到尾数:=RIGHT(C3)+0
3、将Q3单元格向右填充到W3
2、x3的代码,用于准备排序:=IF(COUNTIF($Q3:$W3,RIGHT(C3)+0)>1,100000*RIGHT(C3)+0+COLUMN(C3),"")
4、将x3单元格向右填充到AD3
5、J3的代码,用于排序并展示结果:=IF(IF(ISERR(SMALL($X3:$AD3,COLUMN(C3)-COLUMN($C$1)+1)),"",SMALL($X3:$AD3,COLUMN(C3)-COLUMN($C$1)+1))<>"",INDEX($C3:$I3,MATCH(IF(ISERR(SMALL($X3:$AD3,COLUMN(C3)-COLUMN($C$1)+1)),"",SMALL($X3:$AD3,COLUMN(C3)-COLUMN($C$1)+1)),$X3:$AD3,0)),"")
6、将J3单元格向右填充到P3
7、将J3到AD3单元格向下填充到你所需要的列
8、你想要保留的数据列,例如你Q列想要放入其它数据,在Q列右键,插入列即可。