3k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,

unter der SuFu bin ich leider nicht erschöpfend fündig geworden. Hier ist mein Problem. Ich habe in eine Excel-Datei aus einem anderen Programm Kundendaten eingelesen und möchte einen Dublettenabgleich vornehmen.
Da die Einträge natürlich nicht zu 100% übereinstimmen, muss ich also nach ähnlichen Einträgen suchen. Eine potentielle Dublette bzw. einen ähnlichen Eintrag definiere ich für meine Belange insofern, dass die ersten 4 Buchstaben im Nachnamen (Spalte C) und die Postleitzahl (Spalte H) übereinstimmen müssen. Wenn diese Kriterien auf mehrere Kunden zutreffen, möchte ich von den Treffern die beiden Suchspalten C und H sowie zusätzlich den Eintrag aus Spalte A (Kundennummer) in einem separaten Sheet angezeigt bekommen.

Würde mich freuen, wenn mir hier jemand zu Hilfe kommen könnte.

Danke im Voraus und viele Grüße

7 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo HerrMeyer,

ich würde den Spezialfilter einsetzen.

Damit kannst Du alle Adressen mit den genannten Kriterien heraus filtern und an einem beliebigen Platz ablegen.

Auch Dubletten könntest Du damit heraus filtern.

Gruß
Rainer
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-) HerrMeyer

reicht auf explicit doppelte oder sollte es auf mehrfach doppelte sein ?

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-)

ein erster versuch auf einfach doppelte

gruss nighty

Worksheet(1)=Quelldaten
Worksheet(2)=Zieldaten ohne doppelte
Worksheet(3)=doppelte daten

Sub Vergleich()
Dim Lzeile As Long, Szelle As Long, Lzelle As Long, DatIndex As Long
Dim zelle As Variant, Bereich As Variant
Lzeile = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
ReDim Dat(Lzeile, 3) As Variant
Worksheets(1).Activate
Bereich = Range("A2:H" & Lzeile)
For Szelle = 1 To Lzeile - 1
For Lzelle = 1 To Lzeile - 1
If Szelle <> Lzelle Then
If UCase(Mid(Bereich(Szelle, 3), 1, 4)) = UCase(Mid(Bereich(Lzelle, 3), 1, 4)) Then
If Bereich(Szelle, 8) = Bereich(Lzelle, 8) Then
If Bereich(Szelle, 1) <> True Then
Dat(DatIndex, 0) = Bereich(Szelle, 1)
Dat(DatIndex, 1) = Bereich(Szelle, 3)
Dat(DatIndex, 2) = Bereich(Szelle, 8)
DatIndex = DatIndex + 1
Dat(DatIndex, 0) = Bereich(Lzelle, 1)
Dat(DatIndex, 1) = Bereich(Lzelle, 3)
Dat(DatIndex, 2) = Bereich(Lzelle, 8)
Bereich(Szelle, 1) = True
Bereich(Lzelle, 1) = True
DatIndex = DatIndex + 1
End If
End If
End If
End If
Next Lzelle
Next Szelle
Worksheets(2).Activate
Range("A2:H" & Lzeile) = Bereich
Worksheets(2).Columns(1).SpecialCells(xlCellTypeConstants, xlLogical).EntireRow.Delete
Worksheets(3).Activate
Range("A2:C" & Lzeile).Resize(UBound(Dat())) = Dat()
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi .-) HerrMeyer

ergänzt auf mehrfach doppelten

gruss nighty

Sub Vergleich()
Dim Lzeile As Long, Szelle As Long, Lzelle As Long, DatIndex As Long, MIndex As Long
Dim zelle As Variant, Bereich As Variant
Lzeile = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
ReDim Dat(Lzeile, 3) As Variant
Worksheets(1).Activate
Bereich = Range("A2:H" & Lzeile)
For Szelle = 1 To Lzeile - 1
For Lzelle = 1 To Lzeile - 1
If Szelle <> Lzelle Then
If UCase(Mid(Bereich(Szelle, 3), 1, 4)) = UCase(Mid(Bereich(Lzelle, 3), 1, 4)) Then
If Bereich(Szelle, 8) = Bereich(Lzelle, 8) Then
If Bereich(Szelle, 1) <> True Then
MIndex = MIndex + 1
If MIndex = 1 Then
Dat(DatIndex, 0) = Bereich(Szelle, 1)
Dat(DatIndex, 1) = Bereich(Szelle, 3)
Dat(DatIndex, 2) = Bereich(Szelle, 8)
Bereich(Szelle, 1) = True
DatIndex = DatIndex + 1
Else
DatIndex = DatIndex + 1
Dat(DatIndex, 0) = Bereich(Lzelle, 1)
Dat(DatIndex, 1) = Bereich(Lzelle, 3)
Dat(DatIndex, 2) = Bereich(Lzelle, 8)
Bereich(Lzelle, 1) = True
End If
End If
End If
End If
End If
Next Lzelle
MIndex = 0
Next Szelle
Worksheets(2).Activate
Range("A2:H" & Lzeile) = Bereich
Worksheets(2).Columns(1).SpecialCells(xlCellTypeConstants, xlLogical).EntireRow.Delete
Worksheets(3).Activate
Range("A2:C" & Lzeile).Resize(UBound(Dat())) = Dat()
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all :-)

worksheet(3) bei der Darstellung :-)))
lol die Reihenfolge der Darstellung ist ja mysterios
ich vermute Kobolde in der Wohnung *g*

aber die richtigen Daten schonmal ^^

gruss nighty
0 Punkte
Beantwortet von
Hallo nighty,

vielen Dank für die Bemühung. Ich werde das mal ausprobieren, wenn ich wieder aus dem Urlaub zurück bin.

Ich muss aber auch erstmal schauen, wie oder wo ich das, was du geschrieben hast hineinkopieren muss. Ich denke, dass man sicherlich in einen Entwicklermodus schalten muss, oder?
Bin da noch nicht so firm in diesen Dingen.

Vielen Dank
der Meyer
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

*ich liebe Google hihi*

der code kommt dann in ein allgemeines modul und kann einer tastatur Kombination oder steuerelement zugewiesen werden,im unteren link gut beschrieben

gruss nighty

http://www.online-excel.de/excel/singsel_vba.php?f=44
...