2015-05-22 3 views
-1

У меня есть странная проблема, когда у меня есть база данных с столбцом для адресов электронной почты, которые содержат много дубликатов. Мне нужно удалить первый экземпляр каждого адреса электронной почты, но сохранить все оставшиеся дубликаты. Это возможно?Удалите первую строку каждой повторяющейся строки

Мне также нужны уникальные строки для удаления.

+0

У вас есть поле (aka * key *), которое может обеспечить сортировку, где результаты показывают запись, которую вы хотите сохранить в первую очередь. После этого Data ► Remove Duplicates. – Jeeped

+0

Есть несколько адресов, которые есть 4 или 5 раз, хотя –

ответ

2

Мы начинаем со дна и работаем вверх. Если значение существует выше, оставьте строку. Если значение не существует выше, но существует ниже, удалить строку .:

Если мы начнем с:

enter image description here

и запустить этот макрос:

Sub KleanUp() 
    Dim N As Long, v As String, i As Long, wf As WorksheetFunction 
    Set wf = Application.WorksheetFunction 
    Dim rLookUp As Range, rLookDown As Range 

    N = Cells(Rows.Count, 1).End(xlUp).Row 
    For i = N To 2 Step -1 
     v = Cells(i, 1).Text 
     Set rLookUp = Range("A1:A" & i - 1) 
     Set rLookDown = Range("A" & i + 1 & ":A" & N) 
     If wf.CountIf(rLookUp, v) > 0 Then 
     Else 
     If wf.CountIf(rLookDown, v) > 0 Then 
      Cells(i, 1).EntireRow.Delete 
     End If 
     End If 
    Next i 

    If wf.CountIf(Range("A2:A" & N), Cells(1, 1).Text) > 0 Then 
     Cells(1, 1).EntireRow.Delete 
    End If 
End Sub 

Мы закончится с этим:

enter image description here

0

Без хотя бы минимального образца отредактированных данных и без каких-либо специфических особенностей для столбца, который содержит адреса электронной почты, трудно быть точным, но это может выполняться по запросу.

Sub del_first() 
    Dim rw As Long, iEMLcol As Long 

    iEMLcol = 1 'define the column that holds the email addresses. This is column A 

    With ActiveSheet 'define this worksheet properly!! 
     For rw = .Cells(Rows.Count, iEMLcol).End(xlUp).Row To 2 Step -1 
      If (Application.CountIf(.Columns(iEMLcol), .Cells(rw, iEMLcol).Value) > 1 And _ 
       Application.CountIf(.Columns(iEMLcol).Resize(rw, 1), .Cells(rw, iEMLcol).Value) = 1) Or _ 
       Application.CountIf(.Columns(iEMLcol), .Cells(rw, iEMLcol).Value) = 1 Then 
       .Rows(rw).Delete 
      End If 
     Next rw 
    End With 
End Sub