Clever-Excel-Forum

Normale Version: Duplikate entfernen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hey! Ich möchte innerhalb einer Spalte Duplikate mittels VBA entfernen, nach folgender Logik:
A2 = A3 > A3.Clear
A2 nicht gleich A3 > nichts, next
A3 = A4 > A4. Clear ...

Das habe ich nun nach folgender Logik geschrieben, leider funktioniert dies nicht so ganz. Woran liegt es?


Zitat:Sub schleife()
    Dim Zeile As Long
    Dim ZeileMax As Long
   
    With tbl_data
   
        ZeileMax = .UsedRange.Rows.Count
       
            For Zeile = 2 To ZeileMax
                For Zeile2 = 3 To ZeileMax
           
                    If .Range("A" & Zeile) = .Range("A" & Zeile2) Then
                        .Range("A" & Zeile).Clear
                    End If
                   
                Next Zeile2
           
            Next Zeile
           
    End With
         
End Sub
Edit: Mir fällt gerade auf, dass er nicht alle Duplikate mitnehmen würde.
Habt ihr eine Idee?
Hallo Joshua,
Sub schleife()
   Dim Zeile As Long
   Dim ZeileMax As Long
 
   With tbl_data
       ZeileMax = .UsedRange.Rows.Count
       For Zeile = 2 To ZeileMax
           If .Range("A" & Zeile) = .Range("A" & Zeile + 1) Then
                 .Range("A" & Zeile).Clear
           End If
       Next Zeile
   End With
End Sub
Gruß Uwe
Hallo Joshua,

mein vorheriger Code funktioniert nur, wenn Spalte A sortiert ist.
Folgender Code sollte universeller passen:
Sub schleife_2()
   Dim Zeile As Long
   Dim ZeileMax As Long
 
   With tbl_data
       ZeileMax = .UsedRange.Rows.Count
       For Zeile = .UsedRange.Row To ZeileMax
           If Application.CountIf(.Range("A2:A" & ZeileMax), .Range("A" & Zeile)) > 1 Then
                 .Range("A" & Zeile) = ""
           End If
       Next Zeile
   End With
End Sub
Gruß Uwe
(15.12.2016, 09:34)Kuwer schrieb: [ -> ]Hallo Joshua,
Sub schleife()
   Dim Zeile As Long
   Dim ZeileMax As Long
 
   With tbl_data
       ZeileMax = .UsedRange.Rows.Count
       For Zeile = 2 To ZeileMax
           If .Range("A" & Zeile) = .Range("A" & Zeile + 1) Then
                 .Range("A" & Zeile).Clear
           End If
       Next Zeile
   End With
End Sub
Gruß Uwe

Vielen Dank!

Ziel ist es, dass immer der erste Wert stehen bleibt, und alle Duplikate dadrunter gelöscht werden.
Mit deinem Code werden jedoch die letzten Werte beibehalten und die vorherigen gelöscht.

Ich habe versucht die Schleife von unten nach oben durchlaufen zu lassen, dass hat aber nicht geholfen.
Woran liegt das?
Hallo Joshua,

von unten nach oben dann am besten so:
Sub schleife_2()
   Dim Zeile As Long
   Dim ZeileMax As Long
 
   With tbl_data
       ZeileMax = .UsedRange.Rows.Count + .UsedRange.Row - 1
       For Zeile = ZeileMax To .UsedRange.Row Step -1
           If Application.CountIf(.Range("A2:A" & ZeileMax), .Range("A" & Zeile)) > 1 Then
                 .Range("A" & Zeile) = ""
           End If
       Next Zeile
   End With
End Sub
Gruß Uwe