我有一个包含以下列数据的Excel文档:
Country,AnimalName,Year,ResultsQuality(1-6),ResultA,ResultB,ResultC.....ResultZ
ResultQuality指示行中结果的准确度(ResultA-ResultZ),最高质量为ResultsQuality = 1,较低质量等级为ResultsQuality = 6.
以下是一些行示例:
row#1: US,Camel,1985,2,111,222,333.....999
row#2: US,Camel,1985,5,114,227,338.....958
row#3: CANADA,Camel,1985,3,214,257,638.....858
row#4: CANADA,Shark,1985,1,14,27,38.....8
row#5: CANADA,Shark,1985,2,14,257,3.....628
row#6: CANADA,Shark,1985,4,14,25,63.....568
row#7: CANADA,Shark,1985,6,14,25,6.....838
如您所见,[Country,AnimalName,Year]键可以包含一行或多行,其中包含不同的resultQuality。
宏应该: 浏览所有行,并为每个[Country,AnimalName,Year]键 - 保持最高质量的结果行。应删除[Country,AnimalName,Year]的其他质量较差的行。
在上面的3行上运行宏之后 - 结果应为:
row#1: US,Camel,1985,2,111,222,333.....999
row#2: CANADA,Camel,1985,3,214,257,638.....858
row#3: CANADA,Shark,1985,1,14,27,38.....8
感谢分配!
答案 0 :(得分:0)
实际上,这可以在不声明单个变量的情况下完成。删除重复项从底部到顶部工作,因此如果数据正确排序并提供适当的列以确定重复,则操作应该很容易。
Sub Highest_Priority_Weight()
With ActiveSheet.Cells(1, 1).CurrentRegion
'this method can only use three key columns on a sort so we do it twice
.Cells.Sort Key1:=.Columns(4), Order1:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlYes
.Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _
Key2:=.Columns(2), Order2:=xlAscending, _
Key3:=.Columns(3), Order3:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlYes
'now that the best are at the top, dedupe to clear all others
.RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes
End With
End Sub
应该转过来,
..进入类似的事情,
对于Excel,这是我所知道的最快捷方式。如果您更喜欢其他显示格式,可以在.RemoveDuplicates
操作后添加后续排序例程。