楼主 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楼 悟空师弟 |
利用条件格式与数组公式结合解决,不知方法是否可行: 数组公式为:
- =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 |
- Sub test()
- arr = Range("a2:b12")
- Set dic = CreateObject("scripting.dictionary")
- For Each arrr In arr
- dic(arrr) = ""
- Next
- ar = dic.keys
- 'Stop
- For ii = 0 To UBound(ar)
- a = Application.WorksheetFunction.CountIf(Range("b2:b12"), ar(ii))
- b = Application.WorksheetFunction.CountIf(Range("a2:a12"), ar(ii))
- If a = 0 Then Cells(Range("d65536").End(3).Row + 1, 4) = ar(ii): Cells(Range("d65536").End(3).Row + 1, 5) = ""
- 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)
- 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)
- 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)
- Next
- 'Stop
- Range("d:d").Replace "%", ""
- 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 |
谢谢楼主啦~~~~ |