Public Function SoundsLike(ByVal pWord As String, Optional pAccuracy As Byte = 4) As String
On Error GoTo LocalError
' char importance "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim x As Integer
Dim CChar As String
If pAccuracy > 10 Then
pAccuracy = 10 ' maximum accuracy allowed
ElseIf pAccuracy < 4 Then
pAccuracy = 4 ' minimum accuracy allowed
End If
' account for the first character
pAccuracy = pAccuracy - 1
pWord = UCase(pWord)
' strip all invalid characters
For x = 1 To Len(pWord)
If Asc(Mid(pWord, x, 1)) < 65 Or _
Asc(Mid(pWord, x, 1)) > 90 Then
Mid(pWord, x, 1) = "@" ' assign a catchable value
End If
Next x
pWord = Trim(pWord)
SoundsLike = pWord
' assign values to the string
SoundsLike = Replace(SoundsLike, "A", "0")
SoundsLike = Replace(SoundsLike, "E", "0")
SoundsLike = Replace(SoundsLike, "I", "0")
SoundsLike = Replace(SoundsLike, "O", "0")
SoundsLike = Replace(SoundsLike, "U", "0")
SoundsLike = Replace(SoundsLike, "Y", "0")
SoundsLike = Replace(SoundsLike, "H", "0")
SoundsLike = Replace(SoundsLike, "W", "0")
SoundsLike = Replace(SoundsLike, "B", "1")
SoundsLike = Replace(SoundsLike, "P", "1")
SoundsLike = Replace(SoundsLike, "F", "1")
SoundsLike = Replace(SoundsLike, "V", "1")
SoundsLike = Replace(SoundsLike, "C", "2")
SoundsLike = Replace(SoundsLike, "S", "2")
SoundsLike = Replace(SoundsLike, "G", "2")
SoundsLike = Replace(SoundsLike, "J", "2")
SoundsLike = Replace(SoundsLike, "K", "2")
SoundsLike = Replace(SoundsLike, "Q", "2")
SoundsLike = Replace(SoundsLike, "X", "2")
SoundsLike = Replace(SoundsLike, "Z", "2")
SoundsLike = Replace(SoundsLike, "D", "3")
SoundsLike = Replace(SoundsLike, "T", "3")
SoundsLike = Replace(SoundsLike, "L", "4")
SoundsLike = Replace(SoundsLike, "M", "5")
SoundsLike = Replace(SoundsLike, "N", "5")
SoundsLike = Replace(SoundsLike, "R", "6")
CChar = Left(SoundsLike, 1)
For x = 2 To Len(SoundsLike)
If Mid(SoundsLike, x, 1) = CChar Then
Mid(SoundsLike, x, 1) = "@"
Else
CChar = Mid(SoundsLike, x, 1)
End If
Next x
SoundsLike = Replace(SoundsLike, "@", "")
SoundsLike = Mid(SoundsLike, 2)
SoundsLike = Replace(SoundsLike, "0", "")
SoundsLike = SoundsLike & String(pAccuracy, "0")
SoundsLike = Left(pWord, 1) & Left(SoundsLike, pAccuracy)
Exit Function
LocalError:
End Function