HERBERS Excel-Forum - das Archiv

Thema: Löschen von veralteten Duplikaten

Löschen von veralteten Duplikaten
Mille89
Hallo Zusammen,

Ich habe auf dem Tabellenblatt "Datenbank" eine Datenbank die durch eine Masken auf einem anderen Tabellenblatt mittels Makro gefüllt wird, sobald dort auf Daten übertragen geklickt wird.
Es gibt ein Feld (Spalte B) worin eine eindeutige Identifikation der Daten gegeben ist und diese sollte nur einmal in der gesamten Tabelle vorkommen.
Leider müssen hin und wieder korrigierte Daten übertragen werden, wodurch es zu Duplikaten kommt.
Gibt es einen VBA Code um die älteren, also obenstehenden Duplikate zu löschen, sobald eine aktualisierte Zeile unten drunter eingefügt wird?

Ich bin auf meiner Suche immer nur auf Makros gestoßen, wodurch die in der Tabelle untenstehenden doppelten Zeilen gelöscht werden und der oberste Datensatz stehen bleibt.

Vielen Dank im Voraus.
AW: Löschen von veralteten Duplikaten
ralf_b
wenn man einen Datensatz, identifizierbar durch eindeutige Id, bearbeitet, dann sollte es diesen anschließend nicht zweimal geben. Es deutet auf eine fehlerhafte Programmierung hin.
Um das sauber zu implementieren müßte man sich das Programm mal ansehen.
AW: Löschen von veralteten Duplikaten
Daniel
Hi
DuplikateEntfernen löscht immer die unteren Daten und lässt die oberste Zeile einer Duplikatgruppe stehen.

Wenn man jetzt neue mit alten Daten kombinieren und veraltete Datenzeilen mit DuplikateEntfernen löschen will dann muss man entweder:
a) die alten Daten unter den neuen einfügen bzw die neuen über den alten
Oder
b) vor dem DuplikateEntfernen dir Daten anhand des Datums so sortieren, dass die neuste Datenzeilen oben steht

Gruß Daniel
AW: Löschen von veralteten Duplikaten
Mille89
Die ID ist die Maschinenummer und kann daher nur einmal existieren.
Aufgrund von Auffälligkeiten im Prüflauf muss ganz selten eine Maschine aber zweimal geprüft werden und daher kommt unter der selben Maschinennummer ein zweiter Datensatz hinzu.
Der erste war damit ungültig und muss für die Weiterverarbeitung der Daten entfernt werden. Bisher wird das manuell geprüft und gelöscht.

Ich habe mal eine stark vereinfachte und anonymisierte Datei angehangen wo die Eingabemaste und Datenbank zu sehen ist.
Bei der Eingabemaste ist alles neben und incl. Roter Balken später ausgeblendet.
In der Datenbank darf der Wert In Spalte B Und/Oder Spalte F nur einmal vorkommen. Da die in der richtigen Datenbank miteinander verknüpft sind, genügt wenn nur einer davon erfüllt ist.

https://www.herber.de/bbs/user/168479.xlsm
AW: Löschen von veralteten Duplikaten
Mille89
Nachtrag:
Alternativ zum Löschen des Veralteten Datensatzes ist es auch möglich den alten Datensatz mit den neuen Werten zu Überschreiben.
Allerdings fehlt mir dafür das Verständnis wie ich beim Speichern die Abfrage mache, ob es schon Daten gibt.

https://www.herber.de/bbs/user/168479.xlsm
AW: Löschen von veralteten Duplikaten
ralf_b
leider ist hier noch unklar was die ID sein soll. Diese Bezeichnung finde ich nicht. es gibt eine eindeutige lfdnr und eine Maschinenummer ,die aber als Langtyp eingetragen wird.
'Übertragen in Wuchtdatenbank

'Übertragen Vereinfachtes Wuchten
Sub SaveVereinfachtesWuchten()
Dim oLstobj As ListObject
Dim oLstrow As ListRow
Dim fund

Dim shMaske As Worksheet
Set shMaske = Worksheets("Auswuchten Vereinfacht")

With Sheets("Tarierläufe Datenbank")

Set oLstobj = .ListObjects(1)

'suche in Langtypspalte nach der Masch nr
fund = Application.Match(shMaske.Range("C2").Value, oLstobj.ListColumns("Langtyp").DataBodyRange, 0)
If IsNumeric(fund) Then
Set oLstrow = oLstobj.ListRows(fund) 'wenn langtyp bzw maschnummer vorhanden
Else
Set oLstrow = oLstobj.ListRows.Add 'wenn nicht vorhanden neue zeile
oLstrow.Range(1).Value = WorksheetFunction.Max(oLstobj.ListColumns(1).DataBodyRange) + 1 'neue lfdnr setzen
End If

'werte in db zeile eintragen
oLstrow.Range(2).Resize(1, Range("AP6:CC6").Columns.Count).Value = shMaske.Range("AP6:CC6").Value

'Prüfername eintragen
oLstrow.Range(oLstobj.ListColumns("Prüfer").Index).Value = shMaske.Range("H10").Value

End With

Set oLstrow = Nothing: Set oLstobj = Nothing: Set shMaske = Nothing
End Sub

'Löschen Vereinfachtes Wuchten
Sub ClearVereinfachtesWuchten()

With Sheets("Auswuchten Vereinfacht")
.Range("C2", "E3").ClearContents
.Range("H2", "J3").ClearContents
.Range("C4", "J5").ClearContents
.Range("C6", "E6").ClearContents
.Range("H6", "J6").ClearContents
.Range("C7", "D8").ClearContents
.Range("H7", "I8").ClearContents
.Range("C9", "E9").ClearContents
.Range("H9", "J9").ClearContents
.Range("C10", "E10").ClearContents
.Range("H10", "J10").ClearContents
.Range("B17,D17,G17,I17,L17,N17").ClearContents
.Range("E26,J26").ClearContents
.Range("B32:B35,G32:G35").ClearContents
.Range("B42,D42,G42,I42,L42,N42").ClearContents
.Range("E51,J51").ClearContents
.Range("B57:60,G57:G60").ClearContents
.Range("B67,D67,G67,I67,L67,N67,").ClearContents
.Range("B73,D73,G73,I73").ClearContents

End With
End Sub


AW: Löschen von veralteten Duplikaten
Mille89
Vielen Dank. Mit der Lösung klappt es.

Ja ich habe selbst gemerkt, ich hatte einen Kopf mit Falschen Bezeichnungen eingefügt,
aber die Bezugszellen und Spalten konnte ich entsprechend anpassen und es Funktioniert wie gewünscht.