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ß
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
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?
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)
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