Registriert seit: 22.04.2016
Version(en): 2016
15.12.2016, 10:18
(Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2016, 10:34 von joshua.)
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?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• joshua
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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
Registriert seit: 22.04.2016
Version(en): 2016
(15.12.2016, 10: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?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• joshua