【发布时间】: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 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 的建议,你会实现你想要的。
标签: vba duplicates