我想创建宏来从单列中删除重复的单元格,并为其余列重复相同的内容。
我有代码为单列及其工作执行此操作,但我无法转换此代码以重复其余列的相同过程。
有人可以帮我解决这个问题吗?
Sub Delete_Dupes2()
Dim lastrow As Long
Application.ScreenUpdating = False
With Sheet2
lastrow = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("$A$1:$A$" & lastrow).RemoveDuplicates Columns:=1, Header:=xlYes
End With
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:0)
这里是前10列:
Sub Delete_Dupes3()
Application.ScreenUpdating = False
Dim LastRow As Long
With Sheet2
For j = 1 To 10
LastRow = .Cells(.Rows.Count, j).End(xlUp).Row
.Range(.Cells(1, j), .Cells(LastRow, j)).RemoveDuplicates Columns:=1, _
Header:=xlYes
End If
End With
Application.ScreenUpdating = True
End Sub
顺便说一句,在你的截图(可能是虚拟数据)中,没有标题但是参数却相反:Header:=xlYes
答案 1 :(得分:0)
另一种方式(R3uK在我测试我的答案时发布) 我添加了两种引用范围的方法 - 第一种返回行号,第二种返回对单元格的引用。
由于R3uK和我自己都放了 - 而不是使用.Range("$A$1:$A$" & lastrow)
我发现使用.Range(.Cells(1, 1), .Cells(lastrow, 1))
更容易,因为你引用的是带有数字而不是字母标记的列。
Option Explicit
Sub Test()
Delete_Dupes2 1
Delete_Dupes2 3
Delete_Dupes2 ColumnNum:=5
Dim x As Long
For x = 1 To 10
Delete_Dupes2 ColumnNum:=x
Next x
End Sub
Sub Delete_Dupes2(ColumnNum As Long)
Dim lastrow As Long
Dim lastrow1 As Range
Application.ScreenUpdating = False
With Sheet2
lastrow = .Cells(Rows.Count, ColumnNum).End(xlUp).Row
.Range(.Cells(1, ColumnNum), .Cells(lastrow, ColumnNum)).RemoveDuplicates Columns:=1, Header:=xlYes
'or
'Set lastrow1 = .Cells(Rows.Count, ColumnNum).End(xlUp)
'.Range(.Cells(1, ColumnNum), lastrow1).RemoveDuplicates Columns:=1, Header:=xlYes
End With
Application.ScreenUpdating = True
End Sub
修改强>
或者您可以将程序名称更改为:
Sub Delete_Dupes2(ColumnNum As Long, wrkSht As Worksheet)
将With Sheet2
行更改为:
With wrkSht
将您的通话(测试)行更改为:
Delete_Dupes2 1, Sheet2
Delete_Dupes2 3, Sheet1
Delete_Dupes2 ColumnNum:=5, wrkSht:=ThisWorkbook.Worksheets("AnotherSheet")
Dim x As Long
For x = 1 To 10
Delete_Dupes2 ColumnNum:=x, wrkSht:=ActiveWorkbook.Worksheets("ASheetInAnotherFile")
Next x