ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > 综合应用 > 【竞赛题】两列含重复文本的排序

【竞赛题】两列含重复文本的排序

作者:绿色风 分类: 时间:2022-08-18 浏览:144
楼主
gouweicao78
 

【题目】
如图所示,A2:B12为源数据区域,有重复的数据,也存在A有B无或A无B有的数据,要求将两列数据进行特殊的“排序”,得到右边的效果。即:A列的数据在D列排出、B列的数据在E列排出,且主要先遵循A列的顺序,B有A无者,排在最后。

【要求】
技巧、函数、VBA等方法不限,可以综合,但应尽量简单,最终目的是实现效果。

【评分】
1、得到正确效果即可+5技能分;
2、视答案精彩情况,可继续加1~10技能分,加分额度可能会因为过于繁琐而降低。

【期限】
2011年1月15日
【竞赛题】两列含重复文本的排序.rar
2楼
kevinchengcw
等不到晚上了,先做了,草版策划的题果然有难度。

【竞赛题】两列含重复文本的排序.rar
3楼
zm0115
函数我是万万做不出来的。VBA 来一个,草版过目。


【竞赛题】两列含重复文本的排序.rar
4楼
悟空师弟
利用条件格式与数组公式结合解决,不知方法是否可行:
数组公式为:
  1. =IFERROR(INDIRECT(TEXT(RIGHT(MIN(IF(COUNTIF(D$1:D1,$A$2:$B$12)<IF(COUNTIF($A$2:$A$12,$A$2:$B$12)>COUNTIF($B$2:$B$12,$A$2:$B$12),COUNTIF($A$2:$A$12,$A$2:$B$12),COUNTIF($B$2:$B$12,$A$2:$B$12)),ROW($2:$12)*10+COLUMN($A:$B)*10001)),4),"R0C0"),),"")

条件格式设为:
=IF(COUNTIF(D$2:D2,D2)>COUNTIF(A$2:A$12,D2),1,0)

详见附件:

【竞赛题】两列含重复文本的排序-悟空师弟.rar
5楼
Violet_Universe
先占个位置,然后来发附件
6楼
wqfzqgk

  1. Sub test()
  2. arr = Range("a2:b12")
  3. Set dic = CreateObject("scripting.dictionary")
  4. For Each arrr In arr
  5. dic(arrr) = ""
  6. Next
  7. ar = dic.keys
  8. 'Stop
  9. For ii = 0 To UBound(ar)
  10. a = Application.WorksheetFunction.CountIf(Range("b2:b12"), ar(ii))
  11. b = Application.WorksheetFunction.CountIf(Range("a2:a12"), ar(ii))
  12. If a = 0 Then Cells(Range("d65536").End(3).Row + 1, 4) = ar(ii): Cells(Range("d65536").End(3).Row + 1, 5) = ""
  13. If b >= 1 And b >= a And a >= 1 Then Cells(Range("d65536").End(3).Row + 1, 4).Resize(b, 1) = ar(ii): Cells(Range("d65536").End(3).Row + 1 - b, 5).Resize(a, 1) = ar(ii)
  14. If b >= 1 And b < a Then Cells(Range("d65536").End(3).Row + 1, 4).Resize(b, 1) = ar(ii): Cells(Range("d65536").End(3).Row + 1, 4).Resize(a - b, 1) = "%": Cells(Range("d65536").End(3).Row + 1 - a, 5).Resize(a, 1) = ar(ii)
  15. If b = 0 And a > 0 Then: Cells(Range("d65536").End(3).Row + 1, 4).Resize(a, 1) = "%": Cells(Range("d65536").End(3).Row + 1 - a, 5).Resize(a, 1) = ar(ii)
  16. Next
  17. 'Stop
  18. Range("d:d").Replace "%", ""
  19. End Sub
7楼
无为
=IF(ROW(B1)>COUNT(MATCH($B$1:$B$12,$A$1:$A$12,0)),INDEX($B$1:$B$26,SMALL(IF(ISERROR(MATCH($B$1:$B$26,$A$1:$A$26,0)),ROW($A$1:$A$26),1),ROW(B1))),INDEX($A$1:$A$12,SMALL(IF(ISERROR(MATCH($B$1:$B$12,$A$1:$A$12,0)),"",MATCH($B$1:$B$12,$A$1:$A$12,0)),ROW(B1))))
新手,大家多多指教!
8楼
无为
没法下载题,所以可能对题的理解有错的地方,不好意思
9楼
qazwer168
谢谢楼主啦~~~~

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap