VBA 删除重复项

Posted

技术标签:

【中文标题】VBA 删除重复项【英文标题】:VBA delete duplicates 【发布时间】:2021-06-19 09:08:37 【问题描述】:

我一直在寻找 VBA 宏来查找重复项并删除重复项所在的行。

Dim Plage As Range
Dim Cel As Range
With Workbooks(Fichier).Worksheets("Facture")
'from A27 to A39
   Set Plage = .Range(.Cells(27, 1), .Cells(39, 1).End(xlUp))
End With
For Each Cel In Plage
    If Application.CountIf(Plage, Cel.Value) > 1 Then
        MsgBox "cel.row : " & Cel.Row
        If Cel.Row = 27 Or Cel.Row = 29 Or Cel.Row = 31 Or Cel.Row = 33 Or Cel.Row = 35 Or Cel.Row = 
        37 Or Cel.Row = 39 Then
            MsgBox "duplicate found"
            Cel.Interior.ColorIndex = 3
        Else ' duplicate on date => skip it
            MsgBox "duplicate date"
        End If
    End If
Next Cel

我的目标是保留一个副本,而不是全部删除,我有点迷路了:/ (我将使用 Selection.Delete Shift:=xlUp)

这就是结果(我只保留奇数行作为重复)。

编辑:This what i have right now

This what RemoveDuplicate gives me

EDIT2:添加 Workbooks(Fichier).Worksheets("Facture").Range("A" & Cel.Row & ":A" & Cel.Row + 1 & "").EntireRow.Select 而不是为单元格着色可以正常工作。

现在我需要获取之前删除的值 Range("A" & Cel.Row + 1 & "").Value 并将其添加到我保留的单元格中,例如 this

但我不知道如何保持非重复单元格地址的位置

【问题讨论】:

为什么不使用Range.RemoveDuplicates 它将保留第一个实例并删除所有其他实例。 保留一份副本?您想要一个副本,但不想更多? RemoveDuplicate 只会删除它们,我需要删除行 我只想要一个 如果你尝试了@ScottCraner 的建议,你会实现你想要的。 【参考方案1】:

下面的代码将remove duplicate rows if you convert your data into an Excel Table。

Option Explicit
Sub RemoveDuplicates()
Dim TblRng As Range
Set TblRng = ActiveSheet.ListObjects("Table1").Range
TblRng.RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

【讨论】:

谢谢,但它只是删除它,而不是删除行【参考方案2】:

几乎找到了解决方案,它可以工作......现在很好

感谢帮助:)

【讨论】:

以上是关于VBA 删除重复项的主要内容,如果未能解决你的问题,请参考以下文章

VBA RemoveDuplicates方法

如何在工作表中动态创建具有列数的数组,以删除多列中的重复项

如何删除 Access 表中的重复项(不使用查询)?

VBA - 查找副本并比较其中哪一个最高

删除没有主键的重复项

从列表中删除重复项?