Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Doppelte Einträge nach mehreren Kriterien löschen

Begonnen von Falke22, August 06, 2010, 10:25:19

⏪ vorheriges - nächstes ⏩

Falke22

Hallo habe folgendes Problem.

Ich habe eine Exceltabell mit ca 5000 Einträgen
Viele dieser Einträge sind doppelt.
un möchte ich im ersten Schritt alle doppelten Einträge löschen, allerdings muss ich dafür 2 Felder auf Gleichheit überprüfen

Zelle A = Namen
Zelle B = Geburtstag
Zelle C = Vorname

Nun möchte ich alle Einträge löschen deren Namen und Geburtstag gleich ist.
Das ganze soll mit VB passieren, damit man bei Erweiterung der Liste nicht immer einen neuen Filter awenden muss.

Hab leidr gar keine Plan wie ich das anstellen könnte

Kann mir jemand helfen?

Gruß

Sulu

Hallo Falke,

ich bin leider nicht versiert genug um dir einen Code in VB zu schreiben. Allerdings könnte ich dir mit einer Grundidee weiterhelfen. Sie ist zwar nicht schnell, aber schneller geht es nicht, mein ich...

Du könntest in einer Schleife alle deine Einträge durchgehen und in dieser schleife wieder eine Schleife programmiert, der die aktuellen Daten mit den Daten aller anderen Datensätze vergleicht (Also hier auch die ganze Tabelle durchlaufen). Wenn Gleichheit herrscht kannst du dann ja einen DS löschen.
Abfragen wären dann ja mit If zu realisieren.

LG
Sulu

Falke22

So nach langem herumdoktoren hab ich mir jetzt ne halbwegs funktionierende Lösung gebastelt

Sub DelDouble()
   Dim lngZeile As Long
   
   Application.ScreenUpdating = False
   For lngZeile = Cells.SpecialCells(xlCellTypeLastCell).Row To 2 Step -1
      If Cells(lngZeile, 5) = Cells(lngZeile, 5) And Cells(lngZeile, 11) = Cells(lngZeile - 1, 11) Then Cells(lngZeile, 1).EntireRow.Delete
   Next
   Application.ScreenUpdating = True
End Sub


Ich schaue also ob die Zelle mit der Zelle darüber identisch ist (Name) und ob zusätzlich das Geburtsdatum übereinstimmt
Trifft beides zu, so löscht er die Zeile.

Das Problem ist jetzt dass wenn sich folgendes Bild darstellt

Förstermann  11.02.82
Förstermann  01.01.00
Förstermann  11.02.82

Dann würde er alle 3 Zeilen unverändert lassen.

Wie kann ich ihn dazu bringen dass er anstatt, die darüberliegende Zelle zu vergleichen die ganze Spalte überprüft

Sprich findest du irgendwo in der Spalte den Namen Förstermann und irgendwo in der anderen Spalte das Geburtsdatum dann lösche die Zeile

Kann mir jemand helfen?

Sulu

Prinzipell könntest du vorher sortieren. Allerdings weiß ich nicht, ob der Programmcode das merkt.

Du könntest auch einfach um deine jetztige schleife noch eine drum herum packen, der immer einen Datensatz nach dem andern einliest und dann wie in der anderen schleife mit allen anderen Daten vergleicht.
Aber ACHTUNG!!! wenn du den Datensatz, den du eingelesen hastmit in der 2. Schleife lässt (also dass er den auch vergleicht), löscht das dann alle Ddatensätze.

LG
Sulu

/edit: Wenn das etwas dauern sollte, ist das dabei vollkommen normal. Da er 2^n operationen durchführt. (n=Anzahl Datensätze)

Stapi

Hallo Falke

Wenn du alle Daten in eine Tabelle eingelesen hast, gibt es doch die Möglichkeit über eine Abfrage Duplikatsuche oder per Code in dem dein "Krit" Name&Vorname&Datum über eine Schleife duplikate sucht bei gefunden sie löscht dort könnte mann MSG Box einfügen der nochmals von dir eine Bestätigung zur Löschung einholt.

Gruß Stefan
Grüße aus dem schönen NRW
Stefan