Clever-Excel-Forum

Normale Version: Duplikate mittels VBA entfernen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Community!

Ich brauche eure Hilfe mal wieder bei einem alten Ansatz, der nun nicht mehr funktioniert.
Ich habe eine Tabelle die ich bereits sortiert habe. Der erste Key dazu ist in Spalte B und der zweite Key in Spalte A. In dieser Spalte A sin zahlreiche Zahlen.
Das neue Problem ist nun, dass sich die Zahlen wiederholen können, da erst nach Spalte B sortiert wird, d.h.:

1 A
1 A
1 A
2 A
2 A
2 A
3 A
4 A
1 B
2 B
2 B

Ziel ist es nun die Duplikate zu entfernen, also entsprechend so:

1 A
   A
   A
2 A
   A
   A
3 A
4 A
1 B
2 B
   B


Der bisherige Code lautet:
Code:
Sub ClearNumber()
   Dim Zeile As Integer
   Dim ZeileMax As Integer
     With tbl_Test
       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

Wo genau liegt nun der Fehler?
Ich bin mir bewusst, dass die bestimmt mit einem Spezialfilter oder sogar der Funktion "Duplikate entfernen" möglich ist. Trotzdem würde ich gerne aus meinen Fehler lernen bzgl. VBA




Edit: Im Grunde soll die Funktion "Duplikate entfernen" auf die Spalte A und B angewendet werden, jedoch, dass die Zellen nicht gelöscht bzw. die Zellen nicht nach oben verschoben werden.
Hallo,

Dein Vorhaben geht nicht, weil wie Du selber schreibst, ein Datensatz doppelt ist, wenn Zellen A und B gleich sind.
Deswegen musst Du erst eine Id aus diesen Zellen bilden.

z.B
C2=A2&B2
Besser mit einem anderen Zeichen dazwischen, damit es unter bestimmten Konstellationen nicht zu Unstimmigkeiten kommt.

C2= =A2&"#"&B2

Da Du keine Zeilen löschst, kann man die Schleife auch von oben beginnen.

Unten Dein Code angepasst und mit der Ergänzung der ID Bildung in Spalte C, welche nach Codeausführung wieder gelöscht wird:

Code:
Sub ClearNumber()
  Dim Zeile As Integer
  Dim ZeileMax As Integer
    With Tabelle1
      ZeileMax = .Cells(.Rows.Count, 2).End(xlUp).Row
      Range("C2:C" & ZeileMax).Formula = "=A2&""#""&B2"
      For Zeile = 2 To ZeileMax
          If Application.CountIf(.Range("C2:C" & Zeile), .Range("C" & Zeile)) > 1 Then
                .Range("A" & Zeile) = ""
          End If
      Next Zeile
      Range("C2:C" & ZeileMax).Clear
  End With
End Sub
Atilla! Vielen Dank, es funktioniert (fast) super.

Leider habe ich in Spalte C etwas stehen, entsprechend werden diese Einträge gelöscht.
Ich muss also wohl am Anfang der Prozedur eine Spalte vor C einfügen und diese am Ende wieder löschen, richtig?

Entsprechend so:


Sub ClearNumber()
Dim Zeile As Integer
Dim ZeileMax As Integer

With tblTest
Columns("C").Insert Shift:=xlToRight
ZeileMax = .Cells(.Rows.Count, 2).End(xlUp).Row
Range("C2:C" & ZeileMax).Formula = "=A2&""#""&B2"

For Zeile = 2 To ZeileMax
If Application.CountIf(.Range("C2:C" & Zeile), .Range("C" & Zeile)) > 1 Then
.Range("A" & Zeile) = ""
End If
Next Zeile
Range("C:C").Delete
End With
End Sub
Hallo Joshua,


Du brauchst keine Spalte einfügen.
Es kann eine beliebige Spalte sein.

Statt C im Code schreibst DU AZ zum Beispiel