Dim db As Database Dim rs As Recordset Dim strCadena As String Dim strApellido1 As String Dim strApellido2 As String Dim strNombre As String Dim n As Variant Dim nPos As Long Dim nTotalExcepciones As Integer Dim nExcepPos As Long 'Asignar variables Set db = CurrentDb() Set rs = db.OpenRecordset("TU_TABLA", dbOpenTable) 'Matriz de posibles valores 'Ponle el valor que quieras al índice 'Y creas las excepciones que consideres Dim sExcepciones(4) As String sExcepciones(0) = "De los " sExcepciones(1) = "De la " sExcepciones(2) = "De " sExcepciones(3) = "San " sExcepciones(4) = "Del " 'El índice máximo de las excepciones nTotalExcepciones = 4 'Nos colocamos en el primer registro rs.MoveFirst 'Hace el bucle Do While Not rs.EOF If IsNull(rs!CAMPO_NOMBRE_COMPLETO) Then Else 'Asigna la cadena al campo nombre completo strCadena = Trim(rs!CAMPO_NOMBRE_COMPLETO) 'Empezamos por extraer el nombre 'Para ello cogemos todo lo que esté a continuación de la coma 'Busca la coma nPos = InStr(1, strCadena, ",") 'La encuentra? If nPos > 0 Then 'Extrae todo lo que está a la derecha de ella strNombre = Mid(strCadena, nPos + 1) 'Y quita espacios si hubiera antes o después strNombre = Trim(strNombre) End If 'Ahora seguimos con los apellidos 'El primero 'Miramos si comienza por alguna de las excepciones anteriores nExcepPos = 0 'Miramos si empieza por alguna de las excepciones, si es así 'guardamos la longitud de la excepción (espacio final incluido) For n = 0 To nTotalExcepciones If Left(strCadena, Len(sExcepciones(n))) = sExcepciones(n) Then nExcepLong = Len(sExcepciones(n)) Exit For End If Next n 'Ahora el primer apellido será hasta que encuentre el primer 'espacio a partir de la longitud de la excepción + 1 nPos = InStr(nExcepLong + 1, strCadena, " ") 'Y cogemos toda la cadena que queda a la izquierda de la posición de ese espacio strApellido1 = Left(strCadena, nPos - 1) 'El segundo 'Hay que coger todo lo que está entre el espacio de final de primer apellido 'y la coma 'Marco el último espacio del primer apellido nPosFinalEspacioPrimerApellido = nPos 'Marco la posición de la coma nPos = InStr(1, strCadena, ",") 'Y corto por ahí strApellido2 = Mid(strCadena, nPosFinalEspacioPrimerApellido + 1, nPos - nPosFinalEspacioPrimerApellido - 1) 'Grabo los datos With rs .Edit !nombre = strNombre !apellido1 = strApellido1 !apellido2 = strApellido2 .Update End With End If 'Al siguiente registro rs.MoveNext Loop