Проще говоря, для этого проекта я хотел бы удалить дубликаты, сохранить последние записи дубликатов и заменить эти последние записи в строке первой записи.Пожалуйста, следуйте приведенному ниже примеру для лучшего понимания:
Я хочу удалить дубликаты на основе идентификационного номера, сохранив последние записи от столбца A до C. Кроме того, я хочу сохранить каждую ячейку в столбце Dи столбец E из первых записей.В конечном итоге это означает, что самые последние записи будут заменены в столбцах A, B и C первых записей.
Важное примечание: столбец D & E будет заполняться только в первой записи каждого идентификатора.Все дополнительные строки с одним и тем же идентификатором всегда будут содержать пустые ячейки в столбцах D & E.
Для большей ясности см. Таблицы ниже, в которых отражены объяснения выше:
На основании приведенного выше примера это означает:
Удаление дубликатов на основе идентификатора из столбцов от A до C и сохранение последних записей каждого идентификатора (от столбца A доC: Удалить содержимое в строках 1, 2, 3, 5 и 6 + сохранить последние записи каждого идентификатора (в данном случае это строки 4 и 7)
Сохранить столбцы D & E изпервые записи каждого идентификатора (обратите внимание, что только первые записи каждого идентификатора будут непустыми ячейками. В этом примере есть два идентификатора, 123 и 458, и только строки 1 и 2 из столбца D & E будут не-impty)
Заменить предыдущие записи самыми последними в строке предыдущих записей из столбца от A до C (от столбца A до C заменить строки 1 и 2 на строки 4 и 7соответственно)
Другими словами: обновить столбцы от A до Cбез изменения столбцов D в E
См. ниже те же таблицы с указанием:
Я пробовал два разных кода, но оба не дают мне концаРезультаты, которые я ищу.
Итак, исходный код, который у меня был, был следующим.Он сохранил только предыдущие записи и сохранил столбцы от A до E такими, какими они были изначально:
Sub Delete_Duplicates()
Sheet5.Range("$A$1:$E$29999").RemoveDuplicates Columns:=Array(1) _
, Header:=xlYes
End Sub
Конечные результаты не точны, поскольку он сохраняет первые записи в столбцах от A до C:
Проблема в приведенном выше коде состоит в том, что он не меняет имя и дату на последние записи (которые будут соответственно Боб, 6-я неделя и Питер, 4-я неделя)
Следующий код, который я сделал, - сохранить самые новые записи, но это, к сожалению, удаляет мои записи в столбце D в E:
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:$E$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
Ниже приведен результат, который я получаю из второго кода:
Приведенный выше код отлично работает, чтобы заменить мои первые записи самыми последними, но он удаляет все в столбце D & E (Comments & Additional com).Мне было интересно, может быть, мой код можно изменить, только заменив дубликаты в определенных столбцах, вместо удаления всей строки (что, очевидно, является проблемой в этом коде).
Я надеюсь, что объяснения были достаточно ясны дляВы, чтобы помочь мне по этому вопросу.Пожалуйста, имейте в виду, что у меня есть тысячи строк, и индивидуальное решение для примера, который я привел, не будет тем, что я ищу.Я открыт для любых предложений и благодарю вас за помощь!