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

时间:2015-12-01 16:27:34

标签: excel vba excel-vba

我想创建宏来从单列中删除重复的单元格,并为其余列重复相同的内容。

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

有人可以帮我解决这个问题吗?

Columns

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  

2 个答案:

答案 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