从excel vba中的单元格范围中删除重复项

时间:2015-07-25 21:17:56

标签: excel vba excel-vba excel-2013

我试图删除excel 2013 VBA中的重复项。但我收到错误"对象不支持此属性或方法"。问题是我没有静态范围可供选择。我想删除列heaader' abcd'中的重复项。

Cells.Find(what:="abcd").Activate
ActiveCell.EntireColumn.Select
Set rng = Selection
ActiveSheet.rng.RemoveDuplicates

3 个答案:

答案 0 :(得分:12)

您需要告诉Range.RemoveDuplicates method要使用的列。另外,既然你已经表示你有一个标题行,你应该告诉.RemoveDuplicates方法。

Sub dedupe_abcd()
    Dim icol As Long

    With Sheets("Sheet1")   '<-set this worksheet reference properly!
        icol = Application.Match("abcd", .Rows(1), 0)
        With .Cells(1, 1).CurrentRegion
            .RemoveDuplicates Columns:=icol, Header:=xlYes
        End With
    End With
End Sub

您的原始代码似乎想要从单个列中删除重复项而忽略周围数据。这种情况是非典型的,我已经包含了周围的数据,因此.RemoveDuplicates进程不会扰乱您的数据。如果您真的想将RemoveDuplicates进程隔离到单个列,请回发评论。

答案 1 :(得分:4)

从单个列中删除重复项

 Sub removeDuplicate()
 'removeDuplicate Macro
 Columns("A:A").Select
 ActiveSheet.Range("$A$1:$A$117").RemoveDuplicates Columns:=Array(1), _ 
 Header:=xlNo 
 Range("A1").Select
 End Sub

如果您有标题,请使用Header:=xlYes

根据您的要求增加范围 你可以像这样把它变成1000:

ActiveSheet.Range("$A$1:$A$1000")

此处有更多信息here

答案 2 :(得分:0)

如果范围内只有一列要清理,只需在末尾添加“(1)”。它表示 Excel 将在范围的哪一列中删除重复项。 类似的东西:

 Sub norepeat()

    Range("C8:C16").RemoveDuplicates (1)

End Sub

问候