Excel宏 - 保持具有最高优先级权重的行

时间:2015-03-17 10:52:08

标签: excel vba excel-vba

我有一个包含以下列数据的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

感谢分配!

1 个答案:

答案 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

应该转过来,

Animal Priority Weights I

..进入类似的事情,

Animal Priority Weights II

对于Excel,这是我所知道的最快捷方式。如果您更喜欢其他显示格式,可以在.RemoveDuplicates操作后添加后续排序例程。