Vba 宏代码,用于从单列中删除重复的单元格,并对其余列重复相同的操作

Vba 宏代码,用于从单列中删除重复的单元格,并对其余列重复相同的操作,vba,excel,Vba,Excel,我想创建宏来删除单列中的重复单元格,并对其余列重复相同的操作 我有代码对单个列及其工作区执行此操作,但我无法将此代码转换为对其余列重复相同的过程 有人能帮我吗 Sub Delete_Dupes2() Dim lastrow As Long Application.ScreenUpdating = False With Sheet2 lastrow = .Cells(Rows.Count, 1).End(xlUp).Row .Range("$A$1:$A$" & l

我想创建宏来删除单列中的重复单元格,并对其余列重复相同的操作

我有代码对单个列及其工作区执行此操作,但我无法将此代码转换为对其余列重复相同的过程

有人能帮我吗

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  


以下是前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

顺便说一句,在您的屏幕截图(可能是虚拟数据)中,没有标题,但参数的说法正好相反:
标题:=xlYes

这里是前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
顺便说一句,在您的屏幕截图(可能是虚拟数据)中,没有标题,但参数的说法正好相反:
标题:=xlYes

另一种方式(R3uK在我测试答案时发布)。
我添加了两种引用范围的方法-第一种返回行号,第二种返回对单元格的引用

正如R3uK和我自己所说的,当你用数字而不是字母名称引用列时,我发现使用
.Range(.Cells(1,1),.Cells(lastrow,1))
比使用
.Range($A$1:$A$”&lastrow)更容易

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\u Dupes2(ColumnNum与工作表一样长,wrkSht与工作表一样长)

将带有Sheet2的
行更改为:
带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
另一种方式(R3uK在我测试答案时发布)。
我添加了两种引用范围的方法-第一种返回行号,第二种返回对单元格的引用

正如R3uK和我自己所说的,当你用数字而不是字母名称引用列时,我发现使用
.Range(.Cells(1,1),.Cells(lastrow,1))
比使用
.Range($A$1:$A$”&lastrow)更容易

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\u Dupes2(ColumnNum与工作表一样长,wrkSht与工作表一样长)

将带有Sheet2的
行更改为:
带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