Wie war doch gleich noch mal der genaue Name? Schmidt, Schmitt oder Smith? Wer nach Namen suchen muss, weiß die SoundEx-Funktion zu schätzen. Mit ihr kann man nach ähnlich klingenden Namen suchen. Das ist auch als unscharfe Suche bekannt.
SoundEx lässt das erste Zeichen des Vergleichsstrings unverändert, die weiteren
Zeichen werden durch je eine Ziffer ersetzt. Dabei bekommen ähnlich klingende
Konsonanten, z.B. b, f, p, v jeweils die gleiche Ziffer. Buchstabenwiederholungen,
Sonderzeichen und Vokale werden ignoriert: Nach drei Ziffern wird die Funktion
beendet. Heraus kommt ein maximal vierstelliger SoundEx-Code, etwa der Art
m262. Ähnlich klingende Wörter bekommen so jeweils den gleichen Code
- wodurch sie vergleichbar werden.
Diese altbekannte Funktion ist schon lange für VBA konvertiert worden, war aber bisher ziemlich langsam. Hier nun eine überarbeitete, ca. 400% schnellere Version. Das ging mit einem einfachen Trick: Ein Computer kann Zahlen nämlich schneller verarbeiten als Text. Daher wird jetzt der Vergleichsstring einem ByteArray zugeordnet:
Dim t() As Byte
t() = strVergleichsstring
Der Array t() wird so mit den ANSI-Werten des Vergleichsstrings
belegt. Jedes zweite Feld im Array enthält je ein Zeichen des Vergleichsstrings
(die Felder dazwischen enthalten je den Wert 0, sie sind für Unicode vorgesehen).
Mit den Bytewerten kann der Computer wesentlich schneller arbeiten als mit dem String.