Clever-Excel-Forum

Normale Version: VBA Zeilen mit Duplikaten löschen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag,

ich muss in einer Liste Duplikate löschen, habe aber bis jetzt noch kein Beitrag gefunden, der mir wirklich helfen konnte.

Wenn am gleichen DATUM (Spalte b) die gleiche UHRZEIT (Spalte h) vorliegt, soll er die zweite Zeile (Duplikat) löschen.

For zeile = zeilemax To 1 Step -1
    If WorksheetFunction.CountIf(Tabelle4.Range("b1:b" & zeile), Cells(zeile, 2)) > 0 Then
    If WorksheetFunction.CountIf(Range("h1:h" & zeile), Cells(zeile, 8)) > 0 Then
    Cells(zeile, 1).EntireRow.Delete
    End If
    End If
Next zeile


Er löscht vereinzelt Duplikate aber bei weitem nicht alle.  Was ist in dem Code falsch?
Hallo,

wieso verwendest du nicht einfach das Bordmittel "Duplikate löschen"?
Reiter Daten - Datentools - Duplikate löschen. Hier wählst du die Spalten aus, welche Duplikate enthalten und klickst auf Ok.
Weil ich dann einen zusätzlichen Schritt machen müsste. So ist es in der Abfrage mit drin und läuft automatisch ab - wenn es klappt.
Dann zeichne den von mir beschriebenen Vorgang mit dem Makrorekorder auf. Das ist die bessere und schnellere Variante als eine Schleife.
Das habe ich auch versucht, lasse ich das Marko nochmal neu durchlaufen bzw binde es in mein Modul ein, erhalte ich eine Fehlermeldung.
Hallo,


Zitat:Das habe ich auch versucht, lasse ich das Marko nochmal neu durchlaufen bzw binde es in mein Modul ein, erhalte ich eine Fehlermeldung.


... und wie lautet der aufgezeichnete Code?
... und wie lautet die Fehlrrmeldung?

Wie soll man Dir helfen können, wenn Du wesentliche Infos geheim hältst?
Hallo,

duplikate löschen aufgezeichnet ergibt eine Zeile Code, Beispielsweise so etwas:

Code:
Sub Makro2()
'
' Makro2 Makro
'

'
    ActiveSheet.Range("$A$1:$I$6").RemoveDuplicates Columns:=Array(2, 8), Header _
        :=xlNo
End Sub

Oben der Code löscht im Bereich A1:I6 Duplikate. Dafür müssen die Werte aus Spalte 2 (B) und Spalte 8 (H) (=Array(2, 8)) gleich sein.

Bei Datumsangaben in Kombination mit Zeitangaben, könnte unter Umständen nicht alles erfasst werden.
Denn es reicht schon eine andere Formatierung der Zellen aus, um das Ergebnis zu verfälschen. Deswegen ganz genau gucken, ob alle Datumsangabe und Zeitangaben in gleicher Form vorliegen.

Unten stelle ich noch einen Code ein, der das Gleiche macht wie der aufgezeichnete. Kann sein, dass er mit Datum und Zeit etwas besser zurechtkommt.
Dafür brauche ich zwei Hilfsspalten in der Datentabelle, im Code auch als solche bezeichnet, können von Dir angepasst werden.
Sie müssen aber nebeneinander liegen.

Code:
Sub dupplikate_loeschen()

Dim zeileMax As Long
Dim i As Long
Dim HilfsSpalte1 As Long, HilfsSpalte2 As Long
HilfsSpalte1 = 13
HilfsSpalte2 = 14

With Tabelle1
   zeileMax = .Cells(.Rows.Count, 2).End(xlUp).Row
   .Range(Cells(1, HilfsSpalte1), Cells(zeileMax, HilfsSpalte1)).FormulaLocal = "=TEXT(B1;""TT.MM.JJJJ"")&""##""&TEXT(H1;""hh:mm"")"
   .Range(Cells(2, HilfsSpalte2), Cells(zeileMax, HilfsSpalte2)).FormulaR1C1 = "=IF(COUNTIF(R1C" & HilfsSpalte1 & ":R[-1]C[-1],RC[-1]),1,"""")" '  "=WENN(ZÄHLENWENN($K$1:K1;K2);1;"""")"
   .Range(Cells(2, HilfsSpalte2), Cells(zeileMax, HilfsSpalte2)).SpecialCells(xlCellTypeFormulas, 1).EntireRow.Select 'select durch delete ersetzen, dann wird gelöscht
End With

End Sub