Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ähnlichkeit von Namen prüfen (evtl. Schreibfehler)

Forumthread: Ähnlichkeit von Namen prüfen (evtl. Schreibfehler)

Ähnlichkeit von Namen prüfen (evtl. Schreibfehler)
Namen
Hallo liebe Excelfreaks,
ich habe heute ein recht anspruchsvolles Anliegen, denn ich möchte Nachnamen und Vornamen auch ihre Ähnlichkeit prüfen.
Das Problem: Für eine Laufserie mit mehreren hundert Teilnehmern liegen die Teilnehmer nicht immer mit identischen Meldedaten vor, weil manchmal Trainer/Freunde/Vereinskameraden die Teilnehmer mit falsch geschriebenen Namen anmelden.
Beispiele für Nachnamen:
Schmit - Schmidt
Hoppe - Hobbe
Mahlzahn - Malzahn
Minzlaff - Minslaff
Schulze - Schultze

Nun suche ich eine VBA-Lösung, über die ich einen JA/NEIN-Wert zurückerhalte, ob es wahrscheinlich ist, dass es sich um den selben Nachnamen handelt. Optimal wäre eine Funktion in der Art:
Function NamenAehnlichkeit(Name1 As String, Name2 As String) As Boolean
End Function
Hat von Euch jemand eine Idee, wie man das lösen könnte?
Viele Grüße
Martin
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Ähnlichkeit von Namen prüfen (evtl. Schreibfehler)
30.06.2011 23:41:13
Namen
Hallo Martin,
das ist meiner Meinung nach mit VBA schwierig und geht eigentlich nur manuell.
Zunächst kannst Du die Daten mit "trim()" oder "ucase()" sowie durch evt. Leerzeichenentfernen waschen. Dann könntest Du mit einer Kombination aus "left" / "mid()" Textteile vergleichen. Aber dennoch sollte man die Texte / Namen in einem solchen Falle immer selbst anschauen. Lass die Frage aber dennoch mal offen...
Gruß Florian
Anzeige
AW: Ähnlichkeit von Namen prüfen (evtl. Schreibfehler)
30.06.2011 23:49:40
Namen
Hallo Florian,
es soll auch darauf hinauslaufen, dass der Anwender (mit Hilfe der gesuchten Function) gefragt werden soll, ob es sich aufgrund von Ähnlichkeiten um dieselbe Person handeln könnte. Die von dir beschriebenen Anpassungen (TRIM/LCASE/Entfernung von Leerzeichen und Bindestrichen) habe ich ja schon genutzt. Aber für die von mir beschriebenen Beispiele muss eine Ähnlichkeitsprüfung her:
Schmit - Schmidt
Hoppe - Hobbe
Mahlzahn - Malzahn
Minzlaff - Minslaff
Schulze - Schultze

Viele Grüße
Martin
Anzeige
Ähnlichkeit von Wörtern
01.07.2011 02:07:33
Wörtern
Hi Martin,
google doch mal nach meinem Betreff.
Eine interessantwe Fundstelle: http://www.vbarchiv.net/tipps/details.php?id=384
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Ähnlichkeit von Wörtern
01.07.2011 08:45:27
Wörtern
Hallo Erich,
vielen Dank für deinen Link. Ich finde den Link wirklich interessant. Ich habe heute noch weit in den Morgen hineingearbeitet (es ist immer schlimm, wenn mich ein Problem beschäftigt) und bin nach zahlreichen Archivsuchen (man muss ja auf die richtigen Suchwörter kommen) auf die "Levenshtein-Distanz" gestoßen:
https://www.herber.de/forum/archiv/784to788/t786466.htm
Leider ist dieser Vergleichs-Algorithmus bei Anwendung auf 400 Namen je Lauf sehr rechenintensiv, weshalb ich diesen nur anwende, wenn zumindest an angegebene Geburtsjahr übereinstimmt. Das Genialste ist, dass ich Dank der Levenshtein-Distanz einen weiteren Fehler in der Serienwertung gefunden habe (Philipp Gomille / Phillip Komille).
Nun habe ich den von dir vorgeschlagenen Soundex-Algorithmus auch getestet, allerdings hat dieser zu viele Übereinstimmungen geliefert, die in Wirklichkeit keine sind. Beim eben genannten Fehler (Gomille/Komille) wurde hingegen nur beim Vornamen eine Übereinstimmung festgestellt. Beim Nachnachem kamen G54 und K54 heraus, weil der Erste Buchstabe übereinstimmen müsste (http://de.wikipedia.org/wiki/Soundex). Dieser Soundex-Algorithmus ist wirklich - wie in deinem Beispiel-Link beschrieben - eher als Eingabehilfe geeignet. Trotzdem werde ich mir den Link speichern, weil ich das sehr interessant finde und vielleicht später einmal für andere Projekte gebrauchen könnte.
Falls jemand einen ähnlich guten Algorithmus wie die "Levenshtein-Distanz" kennen sollte (möglichst mit besserer Performance), wäre ich an einer Info sehr interessiert. Aber prinzipiell ist mein Beitrag nun gelöst.
Viele Grüße
Martin
Anzeige
Danke für deine Rückmeldung, ...
01.07.2011 13:39:19
Erich
Hi Martin,
.... die finde ich prima, vor allem informativ!
Den Namen Levenshtein kannte ich 'eigentlich' schon.
Ich hätte ihn auch für dich in meinen Beitrag geschrieben - wäre er mir nur wieder eingefallen. :-(
So hab ich (auch durch Wiederholung) auch gleich Einiges dazugelernt.
Grüße von Erich aus Kamp-Lintfort und: Schönes Wochenede!
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Ähnlichkeit von Namen in Excel prüfen


Schritt-für-Schritt-Anleitung

Um die Ähnlichkeit von Namen in Excel zu prüfen, kannst du die Levenshtein-Distanz verwenden. Diese Methode vergleicht zwei Strings und gibt an, wie viele Änderungen nötig sind, um einen String in den anderen zu verwandeln.

  1. VBA-Editor öffnen:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Neues Modul einfügen:

    • Klicke auf Einfügen > Modul.
  3. Levenshtein-Funktion einfügen:

    • Kopiere folgenden VBA-Code in das Modul:
    Function Levenshtein(s1 As String, s2 As String) As Integer
       Dim i As Long, j As Long
       Dim cost As Integer
       Dim d() As Long
       Dim min1 As Long, min2 As Long
    
       ReDim d(Len(s1), Len(s2))
    
       For i = 0 To Len(s1)
           d(i, 0) = i
       Next i
       For j = 0 To Len(s2)
           d(0, j) = j
       Next j
    
       For i = 1 To Len(s1)
           For j = 1 To Len(s2)
               If Mid(s1, i, 1) = Mid(s2, j, 1) Then
                   cost = 0
               Else
                   cost = 1
               End If
               d(i, j) = Application.Min(d(i - 1, j) + 1, _
                                         d(i, j - 1) + 1, _
                                         d(i - 1, j - 1) + cost)
           Next j
       Next i
    
       Levenshtein = d(Len(s1), Len(s2))
    End Function
  4. Funktion nutzen:

    • Um die Funktion zu verwenden, schreibe in eine Zelle:
      =Levenshtein(A1, B1)
    • Dies gibt dir die Anzahl der Änderungen zurück, die notwendig sind, um den Namen in Zelle A1 in den Namen in Zelle B1 zu verwandeln.

Häufige Fehler und Lösungen

  • Fehler: Funktion gibt einen Fehler zurück

    • Lösung: Stelle sicher, dass die Funktion korrekt eingefügt wurde und dass du die richtigen Zellreferenzen verwendest.
  • Fehler: Zu hohe Berechnungszeit

    • Lösung: Reduziere die Anzahl der Namen, die du gleichzeitig vergleichst, um die Leistung zu verbessern.

Alternative Methoden

  1. Soundex:

    • Eine einfachere Methode zur Namensähnlichkeit. Der Soundex-Algorithmus wandelt Namen in einen Code um, der ähnliche klingende Namen gruppiert.
    • Verwende die Formel:
      =SOUNDEX(A1)
    • Beachte, dass Soundex nicht immer präzise ist und zu viele Übereinstimmungen liefern kann.
  2. Textfunktionen:

    • Nutze Funktionen wie TRIM(), UPPER() und LEFT() für einfache Vergleiche, um Leerzeichen zu entfernen und Großschreibung zu vereinheitlichen.

Praktische Beispiele

  1. Levenshtein-Distanz:

    • Vergleiche "Schmit" und "Schmidt":
      =Levenshtein("Schmit", "Schmidt")  ' Ergebnis: 1
  2. Soundex Beispiel:

    • Vergleiche "Mahlzahn" und "Malzahn":
      =SOUNDEX("Mahlzahn")  ' Ergebnis: M420
      =SOUNDEX("Malzahn")   ' Ergebnis: M420

Tipps für Profis

  • Kombiniere die Ergebnisse von Levenshtein und Soundex, um die Genauigkeit zu erhöhen.
  • Teste verschiedene Algorithmen und vergleiche die Ergebnisse, um den besten für deine Anwendung zu finden.
  • Optimiere deine VBA-Funktionen für mehr Effizienz, wenn du mit großen Datenmengen arbeitest.

FAQ: Häufige Fragen

1. Frage
Wie kann ich die Levenshtein-Distanz in Excel verwenden?
Antwort: Du kannst die Levenshtein-Funktion im VBA-Editor erstellen und dann in deinen Excel-Formeln verwenden.

2. Frage
Gibt es eine einfachere Methode zur Namensähnlichkeit?
Antwort: Ja, der Soundex-Algorithmus ist eine einfachere Methode, allerdings weniger präzise als die Levenshtein-Distanz.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige