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.

Duplikate entfernen
#1
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?
Antworten Top
#2
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
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • joshua
Antworten Top
#3
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
Antworten Top
#4
(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?
Antworten Top
#5
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
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • joshua
Antworten Top


Gehe zu:


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