yannosch
Goto Top

VB-Exel - Dubletten in einer Spalte samt Zeile löschen oder ausblenden?

Hallo liebe Community,

entweder fehlt mir die Logik oder das Wissen... oder beides.

Ich hänge seid einer gefühlten Ewigkeit beim Versuch, bei Dupletten in der Spalte "E-Mail" samt der Zeile in der sie sich befinden zu löschen.

Zur Verständlichkeit:
Newsletterkontakte sollen importiert werden.
Excel-Liste wurde mir aus irgendeinem ERP in die Hand gedrückt.

6k Kontakte. Manche Kontakte haben die selbe E-Mail (z.B. info@irgendwas).
Das das Tool aber auch Name Anschrift usw. braucht sollen alle Dubletten in der Spalte "E-Mail" samt Zeile in der sie sich befinden gelöscht werden.

Um mein Problem noch besser zu veranschaulichen hier noch ein Bild:
0c67687e10df8a0a82cf4f21a80dac2c

Sollte "YY" als Dublette ausfindig gemacht werden sollen "Zeile 4 & 5" gelöscht werden.

Ich weiß nicht wie ich das am besten machen soll, erweiterte Formatierung, Duplettensuche usw ... mit allem hab ich schon "rumexperimentiert".
Ich vermute mal das es evtl. mit nem VB-Makro funzt. Allerdings fehlt mir da völlig der Ansatz.

Vielen Dank schonmal an alle die mir dabei helfen!

face-smile

Content-Key: 286173

Url: https://administrator.de/contentid/286173

Printed on: April 18, 2024 at 15:04 o'clock

Mitglied: 114757
114757 Oct 20, 2015 at 20:16:53 (UTC)
Goto Top
Moin,
das hier sollte sich doch leicht anpassen lassen:
Vergleich von 2 Tabellen in Excel

Gruß jodel32
Member: colinardo
colinardo Oct 21, 2015 updated at 12:41:29 (UTC)
Goto Top
Hallo Yannosch,
hier ein Makro das das gewünschte erledigt:

Für deinen Test markiert das Skript die Zeilen erst einmal nur gelb. Scharf schalten kannst du das löschen indem du Zeile 22 auskommentierst.
Sub RemoveDuplicates()
    Dim rngDelete As Range, dic As Object, cell As Range
    Set dic = CreateObject("Scripting.Dictionary")  
    With ActiveSheet
        For Each cell In .Range("K2:K" & .Cells(Rows.Count, "K").End(xlUp).Row)  
            If cell.Value <> "" Then  
                If Not dic.Exists(cell.Value) Then
                    dic.Add cell.Value, ""  
                Else
                    If Not rngDelete Is Nothing Then
                        Set rngDelete = Union(rngDelete, cell.EntireRow)
                    Else
                        Set rngDelete = cell.EntireRow
                    End If
                End If
            End If
        Next
    End With
    
    If Not rngDelete Is Nothing Then
        rngDelete.Interior.Color = vbYellow
       'rngDelete.Delete  
    End If
End Sub
Das ist die manuelle Variante "zu Fuß" über ein Dictionary.
Excel hat aber die Duplikats-Funktion schon integriert, dann lässt sich das auf eine Zeile reduzieren:
ActiveSheet.Range("A:N").RemoveDuplicates Columns:=11, Header:=xlYes  
Grüße Uwe
Member: Yannosch
Yannosch Oct 21, 2015 at 12:26:14 (UTC)
Goto Top
Hammer, besten Dank Uwe mein Freund!
Aber du meinst sicher, um es scharf zu schalten, dass Zeile 20 auskommentiert wird, bzw durch Zeile 21 ersetzt wird, oder?
Member: colinardo
Solution colinardo Oct 21, 2015, updated at Oct 23, 2015 at 09:35:09 (UTC)
Goto Top
Aber du meinst sicher, um es scharf zu schalten, dass Zeile 20 auskommentiert wird, bzw durch Zeile 21 ersetzt wird, oder?
Sicher ... Das eine markiert die Zeilen nur in Gelb das andere löscht sie. Die Markierung verschwindet so oder so wenn die Zeile gelöscht wird...

p.s. Die Dublettensuche in Excel kann genau das selbe face-wink

32ebb34bc1811dc79c00daf8fac4a1e0