根据特定的列名称删除重复项

时间:2020-10-06 05:38:33

标签: excel vba

我是vba / macro的新手...我想根据指定的列名“ Container”删除重复项,因此应根据“ container”列重复项删除整个行。我的代码如下,我遇到类型不匹配错误13。请帮助下面的是我的代码和excel屏幕截图。

我的代码

Dim whs As Worksheet
Dim colh

Set whs = Worksheets("POL")
colh = Array("Container")

With whs

 Set rng = Range("A1").End(xlDown)
 rng.RemoveDuplicates Columns:=Array(colh), Header:=xlYes
 End With

基于列名“容器”,我想删除所有重复的行:

enter image description here

2 个答案:

答案 0 :(得分:0)

指定列号而不是标题名。尝试以下代码

Sub RemDup()
Dim whs As Worksheet
Dim lRow As Long

lRow = Range("A1").End(xlDown).Row
Set whs = Worksheets("POL")

     With whs.Range("A1:H" & lRow)
        .RemoveDuplicates Columns:=7, Header:=xlYes
     End With
     
End Sub

如果要使用列标题,则需要搜索列标题,然后从列标题中找到列编号。

#Edit:使用匹配功能动态查找列标题。

Sub RemDup()
Dim whs As Worksheet
Dim lRow As Long, colNumber As Long
Dim colH As String

colH = "Container"
lRow = Range("A1").End(xlDown).Row
Set whs = Worksheets("POL")
colNumber = Application.Match(colH, whs.Range("A1:H1"), 0)

     With whs.Range("A1:H" & lRow)
        .RemoveDuplicates Columns:=colNumber, Header:=xlYes
     End With
     
End Sub

答案 1 :(得分:0)

您的代码有3个问题。

首先,不匹配错误13,因为您使用的“ colh”包含字符串-“ Container”。但是,这些列需要数字。

第二,“ rng”仅包括A列。 “ RemoveDuplicates”仅适用于A列。

第三,“ wh”实际上是没有意义的。您需要使用“ .Range(” A1“)。End(xlDown)”来指定范围是指工作表。否则,它将仅使用活动工作表。

最后,我通常使用“ cells(1,1).end(xltoright).column”等来查找最后一列或最后一行。 您可以参考下面的代码。

Dim whs As Worksheet
Dim colh

Set whs = Worksheets("POL")

With whs
 Set Rng = .Range(.Cells(1, 1), .Cells(Cells(1, 1).End(xlDown).Row, .Cells(1.1).End(xlToRight).Column))

 Rng.RemoveDuplicates Columns:=7, Header:=xlYes '7 means column G
 End With