Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Zeilen mit Duplikaten löschen
#1
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?
Antworten Top
#2
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.
Schöne Grüße
Berni
Antworten Top
#3
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.
Antworten Top
#4
Dann zeichne den von mir beschriebenen Vorgang mit dem Makrorekorder auf. Das ist die bessere und schnellere Variante als eine Schleife.
Schöne Grüße
Berni
Antworten Top
#5
Das habe ich auch versucht, lasse ich das Marko nochmal neu durchlaufen bzw binde es in mein Modul ein, erhalte ich eine Fehlermeldung.
Antworten Top
#6
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?
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#7
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
Gruß Atilla
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste