Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于特定列名删除重复项_Excel_Vba - Fatal编程技术网

Excel 基于特定列名删除重复项

Excel 基于特定列名删除重复项,excel,vba,Excel,Vba,我是vba/宏的新手。。。我想根据指定的列名“Container”删除重复项。应根据“Container”列重复项删除整行。下面是我的代码,其中我得到了类型不匹配错误13。请帮助下面是我的代码和excel截图 我的代码 Dim whs As Worksheet Dim colh Set whs = Worksheets("POL") colh = Array("Container") With whs Set rng = Range("A

我是vba/宏的新手。。。我想根据指定的列名“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
基于列名“Container”,我要删除所有整行重复:


指定列号而不是标题名。试试下面的代码

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
如果要使用列标题,则需要搜索列标题,然后从列标题中查找列编号

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

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

您的代码有3个问题

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

其次,“rng”仅包括A列。“RemovedUpplicates”只会发生在一个列中

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

最后,我通常使用“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


[这可能会对您有所帮助,只需根据您的首选项更改值,让我知道这是否有帮助]()每次列发生变化时,范围可能会不同,因此,不是列:=7我想在此处输入列名并删除整行。范围(“A1:H”)每次都可以携带。。。因此,它应该删除基于列名Perfect sir@Harun24HR的所有数据,这是有效的。。。。然而,我仍然对whs.Range(“A1:H”和:lRow)的代码行感到有点困惑。在这个代码行中,有一个定义为“A1到H”的范围!我并没有低估这部分代码。如果您能告诉我那里到底发生了什么,我将不胜感激。先生
whs.Range(“A1:H”和:lRow)
正在设置从中删除重复项的范围<代码>lRow正在指定上次使用的行。假设您将数据保存到
A200
,然后
“A1:H”和:lRow
正在设置
A1:H200
以删除重复项。非常感谢@Harun24HRno它不起作用,我在“对象”工作表的“set range=.range………”行上收到错误“set range=.range………”错误代码1004方法“range”\n我刚刚检查了它。该程序是由于“单元格”应该是“.cells”。我刚刚更新了代码