Crear clave para distinguir nombres semejantes

He construido una aplicación con Microsoft Access 97 que gestiona una base de datos muy amplia. Me encuentro un problema ya que las personas que trabajan con ella dan de alta clientes con nombres semejantes, pero diferentes:
1.- Rodriguez villa, maría monserrat y
Rodriguez de la villa, Montserrat
2.- Nimba lopez, mª anavela y
Nimba lopes, Ana
Para detectarlos he cargado los nombres de la base de datos en Microsoft Excel y he hecho una transformación del nombre para crear una clave, de modo que en los casos anteriores se identifican claves idénticas para cada una de las dos parejas. Respectivamente:
1.- Rodriguebila, Mon
2.- Nimbalope, Ana
Así se han detectado cientos de posibles duplicados (digo lo de posibles porque en algunos casos no lo son, ya que tengo, por ejemplo tres clientes con el nombre 'GARCÍA GARCÍA, CARMEN' distintos que se distinguen en el nombre por un sufijo final, (1), (2) y (3), que se añade cuando se identifican como distintos pero con nombre idéntico).
El problema surge cuando quiero incorporar esta fórmula al formulario de alta de clientes, ya que mediante macros de Access no lo logro, y mis conocimientos de Visual Basic para Access son limitados.
¿Podrías indicarme cómo construir una función de Visual Basic para Access que me permita crear esta clave con los datos de los nuevos clientes a dar de alta?.
Las fórmulas empleadas para realizar la conversión en Microsoft Excel, por celdas empleadas, son:
A1: "Nombre a transformar"
B1: =SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(A1;"/";"");"(";"");")";"");"?";"");"¿";"");"-";"");"_";"");".";"")
C1: =SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(MAYUSC(B1);"NP";"MP");"CR";"KR");"CL";"KL");"X";"S");"PH";"F");" Y ";" ");"Y";"I")
D1: =SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(C1;" DEL";"");" DE LA";"");" DE LOS";"");" DE LAS";"");" D´";" ");" DE";"");"´";"");"MARIA";"Mª")
E1: =SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(D1;"0";"");"1";"");"2";"");"3";"");"4";"");"5";"");"6";"");"7";"")
F1: =SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(E1;"8";"");"9";"");"V";"B");"TX";"CH");"RR";"R");"LL";"L");"CC";"C");"SS";"S")
G1: =SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(F1;"TT";"T");"Ñ";"N");"GE";"JE");"GI";"JI");"CA";"KA");"CO";"KO");"CU";"KU");"QU";"K")
H1: =SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(G1;"CE";"ZE");"CI";"ZI");"SS";"S");"MN";"N");"W";"B");"Mª";"");"MM";"M");"SS";"S")
I1: =SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(H1;"H";"");"Z ";" ");"Z,";",");"S,";",");"S ";" ");" ";"")
J1: =IZQUIERDA(I1;ENCONTRAR(",";I1)+3)
Obteniéndose así, en la celda J1, la clave que permite identificar los posibles duplicados.
Sospecho que si esta combinación de fórmulas es posible en Microsoft Excel, seguro que se podrá definir una función semejante en Visual Basic para Access.
Por supuesto que te quedaré eternamente agradecido.

1 respuesta

Respuesta
1
Con esta función puedes realizar los pasos que indicas en tu Excel
Esto es el equivalente a tu sustituir creado con visual.
Public Function SustituirCaracter(sTexto As String, sCadenaSustituir As String, sCadenaSustituida As String) As String
If InStr(1, sTexto, sCadenaSustituir) > 0 Then
SustituirCaracter = Left(sTexto, InStr(1, sTexto, sCadenaSustituir) - 1) & sCadenaSustituida & Right(sTexto, Len(sTexto) - (InStr(1, sTexto, sCadenaSustituir)))
Else
SustituirCaracter = sTexto
End If
End Function
Esto es el equivalente a tu J1 para visual
J1= Left (I1,instr (1,i1,",")+3)
Muchas gracias.
La solución ha sido la que necesitaba aunque, dados mis escasos concoimientos de Visual Basic, me ha resultado un poco costoso adaptarla. Esto ha sido debido, sobre todo a que la función que me has proporcionado sólo sustituía el primer carácter del texto para el que encontraba la igualdad, no todos. Además, tampoco se podía emplear directamente para sustituir varios caracteres, como "PH" por "F".
No obstante, como no me gustan las soluciones demasiado fáciles, TIENES TU 5. Te lo has ganado.
Muchas gracias, de nuevo, y un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas