Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Doppelte Einträge mit Bedingung löschen

Doppelte Einträge mit Bedingung löschen
10.01.2019 14:53:37
omar.ab
Guten Tag liebe Community,
ist es möglich in einer Excel Tabelle alle Zeilen mit doppeltem Eintrag in Spalte C per Makro zu löschen, jedoch mit der Bedingung dass Zeilen mit dem Wert "xxx" in der Spalte C IGNORIERT werden (sodass nur doppelte Zeilen gelöscht werden die nicht xxx in Spalte c stehen haben)
Die Länge der Tabelle beträgt sich ca. auf 6000 Zeilen

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Beispielmappe bitte. o.w.T.
10.01.2019 15:03:19
Werner
AW: Beispielmappe bitte. o.w.T.
10.01.2019 15:10:19
omar.ab
Hi,
https://www.herber.de/bbs/user/126650.xlsx
wie zu sehen gibt es mehrere doppelte Einträge in Spalte C, sofern dies der Fall ist soll die komplette doppelte Zeile gelöscht werden. Jedoch sollen Doppelte Spalten mit Eintrag "xxx" in Spalte C davon ausgeschlossen werden
LG
AW: Doppelte Einträge mit Bedingung löschen
10.01.2019 15:10:49
Rudi
Hallo,
in eine Hilfsspalte:
=UND(ZÄHLENWENN(C$1:C2;C2)&gt1;C2"xxx")
nach WAHR filtern und löschen.
Gruß
Rudi
AW: Doppelte Einträge mit Bedingung löschen
10.01.2019 15:11:09
PeterK
Hallo
Schreib in eine Hilfsspalte "=WENN(C2="xxx";"xxx"&ZEILE(C2);C2)" und kopier sie bis ans Ende. Dannach Duplicate entfernen mit der Hilfsspalte
Anzeige
AW: Doppelte Einträge mit Bedingung löschen
10.01.2019 15:12:33
omar.ab
Hi, leider MUSS die Aufgabe per makro gelöst werden, per Formel ist es natürlich übersichtlicher und um einiges einfacher zu lösen. Aber weshalb auch immer wird hier leider ein Makro verlangt.
LG
AW: Doppelte Einträge mit Bedingung löschen
10.01.2019 15:12:35
omar.ab
Hi, leider MUSS die Aufgabe per makro gelöst werden, per Formel ist es natürlich übersichtlicher und um einiges einfacher zu lösen. Aber weshalb auch immer wird hier leider ein Makro verlangt.
LG
AW: Doppelte Einträge mit Bedingung löschen
10.01.2019 15:16:15
Daniel
Hi
dann schreibe dir doch ein Makro, welches die Formel in die erste freie Spalte am Datenende einfügt, dann das Duplikate-Entfernen ausführt und danach die Hilfsspalte wieder löscht.
Das einfügen der Formel und das Ausführen des Duplikateentfernens kannst du auch mit dem Recorder aufzeichen.
Gruß Daniel
Anzeige
AW: Doppelte Einträge mit Bedingung löschen
10.01.2019 15:11:29
Nepumuk
Hallo Omar.ab,
da beißt sich was. Doppelte in Spalte C löschen wenn in Spalte C kein "xxx" vorkommt.
?
Gruß
Nepumuk
AW: Doppelte Einträge mit Bedingung löschen
10.01.2019 15:13:54
omar.ab
Hallo,
Ja es sollen die doppelten Einträge in C gelöscht werden, da es sich hier normalerweise um Namen handelt und diese nicht doppelt vorkommen sollen. Wenn "xxx" in Spalte C steht, bedeutet dies, dass nicht bekannt ist, um welchen Namen es sich hier handelt, daher darf die Zeile in diesem Fall nicht gelöscht werden. Hoffe so ist es verständlicher.
LG
AW: Doppelte Einträge mit Bedingung löschen
10.01.2019 15:34:48
Nepumuk
Hallo Omar,
teste mal:
Option Explicit

Public Sub DeleteDuplicates()
    
    Const NO_NAME As String = "xxx"
    
    Dim objDictionary As Object
    Dim avntValues As Variant
    Dim ialngIndex As Long
    
    With Worksheets("Tabelle1") 'Name der Tabelle anpassen
        
        avntValues = .Range(.Cells(1, 3), .Cells(.Rows.Count, 3).End(xlUp)).Value
        
        Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
        
        For ialngIndex = UBound(avntValues, 1) To LBound(avntValues, 1) Step -1
            
            If avntValues(ialngIndex, 1) <> NO_NAME Then
                
                If objDictionary.Exists(Key:=avntValues(ialngIndex, 1)) Then
                    
                    Call .Rows(ialngIndex).Delete(Shift:=xlShiftUp)
                    
                Else
                    
                    Call objDictionary.Add(Key:=avntValues(ialngIndex, 1), Item:=vbNullString)
                    
                End If
            End If
        Next
        
        Set objDictionary = Nothing
        
    End With
End Sub

Der Code gehört in ein Standardmodul. Menleiste im VBA-Editor - Einfügen - Modul.
Gruß
Nepumuk
Anzeige
AW: Doppelte Einträge mit Bedingung löschen
10.01.2019 15:13:55
omar.ab
Hallo,
Ja es sollen die doppelten Einträge in C gelöscht werden, da es sich hier normalerweise um Namen handelt und diese nicht doppelt vorkommen sollen. Wenn "xxx" in Spalte C steht, bedeutet dies, dass nicht bekannt ist, um welchen Namen es sich hier handelt, daher darf die Zeile in diesem Fall nicht gelöscht werden. Hoffe so ist es verständlicher.
LG
AW: Doppelte Einträge mit Bedingung löschen
10.01.2019 15:53:02
Werner
Hallo Omar,
und hier die Version mit Formel und RemoveDuplicates:
Public Sub Doppelte_raus()
Dim loZeile As Long, loSpalte As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
loZeile = .Cells(.Rows.Count, 3).End(xlUp).Row
loSpalte = .Cells(1, .Columns.Count).End(xlToLeft).Offset(, 1).Column
.Range(.Cells(2, loSpalte), .Cells(loZeile, loSpalte)).FormulaLocal = _
"=WENN(ZÄHLENWENNS(C:C;C2;C:C;""xxx"")>1;0;ZEILE())"
.Range(.Cells(2, loSpalte), .Cells(loZeile, loSpalte)).Value = _
.Range(.Cells(2, loSpalte), .Cells(loZeile, loSpalte)).Value
.Cells(1, loSpalte) = 0
.Range(.Cells(1, 1), .Cells(loZeile, loSpalte)).RemoveDuplicates Columns:=loSpalte, Header:= _
xlNo
.Columns(loSpalte).ClearContents
End With
End Sub
Gruß Werner
Anzeige
AW: Doppelte Einträge mit Bedingung löschen
10.01.2019 17:18:39
Werner
Hallo Omar,
muss hier Header:=xlYes sein
.Range(.Cells(1, 1), .Cells(loZeile, loSpalte)).RemoveDuplicates Columns:=loSpalte, Header:=xlYes
Gruß Werner
Grober Fehler im Code - der hier passt
11.01.2019 06:02:24
Werner
Hallo,
so, jetzt aber:
Public Sub Doppelte_raus()
Dim loZeile As Long, loSpalte As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
loZeile = .Cells(.Rows.Count, 3).End(xlUp).Row
loSpalte = .Cells(1, .Columns.Count).End(xlToLeft).Offset(, 1).Column
.Range(.Cells(2, loSpalte), .Cells(loZeile, loSpalte)).FormulaLocal = _
"=WENN(ZÄHLENWENNS(C:C;C2;C:C;""xxx"")>1;0;ZEILE())"
.Range(.Cells(2, loSpalte), .Cells(loZeile, loSpalte)).Value = _
.Range(.Cells(2, loSpalte), .Cells(loZeile, loSpalte)).Value
.Cells(1, loSpalte) = 0
.Range(.Cells(1, 1), .Cells(loZeile, loSpalte)).RemoveDuplicates _
Columns:=Array(3, loSpalte), Header:=xlNo
.Columns(loSpalte).ClearContents
End With
End Sub
Gruß Werner
Anzeige

320 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige