【发布时间】:2019-07-05 06:04:57
【问题描述】:
在这个项目中,我希望通过保留最新条目来根据 ID 号删除重复项。此外,我想保留 D 列中的每个单元格,并从以前的条目开始。这最终意味着最新条目将被替换为先前条目的行。请参阅下表以获得更清晰的信息:
基于上面给出的示例,我正在寻找的结果是:
- 根据 ID 从 A 到 C 列删除重复项并保留最新条目
- 保留之前条目中的 D 到 H 列
- 用之前条目行中的最新条目替换之前的条目。
换句话说:在不修改 D 列到 H 的情况下更新 A 列到 C 列
所以,我的初始代码如下。它只保留以前的条目并保留 D 到 H 列:
Sub Delete_Duplicates()
Sheet5.Range("$A$1:$H$29999").RemoveDuplicates Columns:=Array(1) _
, Header:=xlYes
End Sub
我做的下一个代码是保留最新的条目,但这会删除我在 D 到 H 列中的条目:
Sub Delete_Duplicates_2()
Dim Rng As Range, Dn As Range, n As Long
Dim Lst As Long, nRng As Range
Set Rng = Sheet5.Range("$A$2:$H$29999")
Lst = Range("A" & Rows.Count).End(xlUp).Row
With CreateObject("scripting.dictionary")
.CompareMode = vbTextCompare
For n = Lst To 1 Step -1
If Not .Exists(Range("A" & n).Value) Then
.Add Range("A" & n).Value, Nothing
Else
If nRng Is Nothing Then
Set nRng = Range("A" & n)
Else
Set nRng = Union(nRng, Range("A" & n))
End If
End If
Next n
If Not nRng Is Nothing Then
nRng.EntireRow.Delete
End With
End Sub
我愿意接受任何建议,感谢您的帮助!
【问题讨论】:
-
我需要澄清一下 - 您是否希望将 cmets 保留在 D 列中?第一个表格示例是您的预期结果吗?
-
是否可以在不同的行上有多个与相同 ID 关联的 D 列条目?如果是这样,你想如何处理?
-
@dwirony:是的,我想将 D 列中的所有 cmets 保留到 H 列。是的,第一个表示例结果是预期的结果。
-
@both:需要注意的是,只有每个 ID 的第一个条目才会有 cmets。所有其他人都不会(该示例反映了这一点)。希望这足够清楚
标签: excel vba duplicates