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 mittels VBA entfernen
#1
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.
Antworten Top
#2
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
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • joshua
Antworten Top
#3
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
Antworten Top
#4
Hallo Joshua,


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

Statt C im Code schreibst DU AZ zum Beispiel
Gruß Atilla
Antworten Top


Gehe zu:


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