top of page

Sustituir una frase por otra.

Tenemos el siguiente texto:




Y el siguiente texto:





Tenemos que dejar el primer texto como el segundo texto, debemos de eliminar caracteres de más, como el interrogante, el punto, y, la barra inclinada, además, debemos de sustituir Aspiradora por Frigorífico.


Vamos a separar cada letra del primer texto, para ello, vamos a usar EXTRAE, donde como argumento texto, es la celda B2, que es el primer texto.


=EXTRAE(B2


Punto y coma, como argumento posición inicial, usamos la función SECUENCIA, donde como argumento filas, usamos LARGO para calcula la longitud de la cadena de la celda B2.


=EXTRAE(B2;SECUENCIA(LARGO(B2))


Punto y coma, como argumento numero de caracteres, ponemos 1, y, cerramos paréntesis.


=EXTRAE(B2;SECUENCIA(LARGO(B2));1)


Es decir, de la cadena de la celda B2, extrae cada carácter.


Aceptamos, y, vemos cada carácter del valor de la celda B2.


















Hacemos lo mismo para la segunda cadena.


=EXTRAE(C2;SECUENCIA(LARGO(C2));1)





















Usamos BUSCARX para buscar el primer EXTRAE en el segundo EXTRAE, y, en caso de coincidencia, que nos devuelva el segundo EXTRAE.


=BUSCARX(EXTRAE(B2;SECUENCIA(LARGO(B2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1))


Aceptamos, y, vemos que donde hay coincidencia aparece el carácter, y, donde no la hay aparece un error.















Quitamos los errores, para ello, usamos LET, creamos una variable, y, almacenamos la expresión anterior.


=LET(a;BUSCARX(EXTRAE(B2;SECUENCIA(LARGO(B2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1))


Punto y coma, como argumento calculo, filtramos la variable A, siempre que dicha variable, no sea un error, por lo que usamos la función NO, y, como argumento de NO, es la función ESERROR de la variable A.


=LET(a;BUSCARX(EXTRAE(B2;SECUENCIA(LARGO(B2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1));FILTRAR(a;NO(ESERROR(a))))


Aceptamos, y, vemos que ya no aparecen los errores.


















Concatenamos.


=CONCAT(LET(a;BUSCARX(EXTRAE(B2;SECUENCIA(LARGO(B2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1));FILTRAR(a;NO(ESERROR(a)))))


Ha quitado los espacios de más.





Preguntamos con el condicional SI, que, si el resultado de la expresión anterior es igual al valor de la celda B2, que nos devuelva dicho valor, en caso contrario, que nos devuelva el valor de la celda C2.


=SI(CONCAT(LET(a;BUSCARX(EXTRAE(B2;SECUENCIA(LARGO(B2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1));FILTRAR(a;NO(ESERROR(a)))))=B2;B2;C2)


Vemos que nos devuelve la cadena correcta, en este caso, es la segunda cadena.






Y ¿si los textos son los mismos?, lo único que cambia es el producto.





Pues, nos sigue devolviendo la segunda cadena.


¿Por qué?


Cuando hemos concatenado.


=CONCAT(LET(a;BUSCARX(EXTRAE(B2;SECUENCIA(LARGO(B2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1);EXTRAE(C2;SECUENCIA(LARGO(C2));1));FILTRAR(a;NO(ESERROR(a)))))


El resultado fue:






Resulta que este texto, no se encuentra ni en la primera cadena, ni en la segunda cadena, pero, como con el condicional SI, le hemos dicho que, si hay coincidencia con la primera cadena, cosa que nunca pasara, pero en ese caso, debe de devolver la celda B2, en caso contrario, que devuelva la cadena de C2, por lo que siempre devolverá la segunda cadena, por eso, el resultado sigue siendo correcto.


Ahora, queremos aplicar esta función al siguiente modelo.












Pero, para este caso, buscamos dos nombres mal escritos.











Debemos de sustituir dichos nombres por los siguientes:





La expresión anterior no nos valdría, porque, ahora, buscamos dos nombres.


Pues, la sintaxis para resolver este problema va a ser más corta.


En una celda, abrimos un paréntesis, seleccionamos el rango A2:A26, y, lo igualamos al valor de la celda D1, el primer nombre mal escrito.


=(A2:A26=D1)


Obtenemos una matriz desbordada con VERDADERO donde hay coincidencia, y, FALSO donde no la hay.











Usamos el condicional SI, donde como argumento prueba lógica, preguntamos si la expresión anterior es igual a VERDADERO.


=SI((A2:A26=D1)=VERDADERO


Punto y coma, como argumento valor si verdadero, que ponga el valor de la celda E1.


=SI((A2:A26=D1)=VERDADERO;E1


Punto y coma, como argumento valor si falso, preguntamos si es igual al valor de D2.


=SI((A2:A26=D1)=VERDADERO;E1;SI((A2:A26=D2)


Punto y coma, como argumento valor si verdadero de este segundo SI, que devuelva el valor de la celda E2.


=SI((A2:A26=D1)=VERDADERO;E1;SI((A2:A26=D2)=VERDADERO;E2


Punto y coma, como argumento valor si falso de este segundo SI, pues, que nos devuelva el valor del rango A2:A26.


Cerramos paréntesis.


=SI((A2:A26=D1)=VERDADERO;E1;SI((A2:A26=D2)=VERDADERO;E2;A2:A26))


Aceptamos, y, vemos como ha sido sustituido correctamente la primera expresión.





Arrastramos, y, todas han sido sustituidas correctamente.












Y si tenemos tres nombres a cambiar.







Si seguimos usando el condicional SI, sería una expresión muy larga, por lo que vamos a acortar la sintaxis con la función CAMBIAR.


En la celda ponemos la función, como argumento expresión, ponemos la celda A2.


=CAMBIAR(A2


Punto y coma, como argumento valor1, ponemos la celda D1, y, fijamos, como argumento resultado1, ponemos la celda E1, y, fijamos.


Es decir, si el valor de la celda A2 es igual al valor de la celda D1, pondrá el valor de la celda E1.


=CAMBIAR(A2;$D$1;$E$1


Punto y coma, como argumento valor2, ponemos la celda D2, y, fijamos, y, como argumento resultado2, ponemos la celda E2, y, fijamos.


Si no es igual a valor1, va a verificar si es igual a valor2.


=CAMBIAR(A2;$D$1;$E$1;$D$2;$E$2


Punto y coma, como argumento valor3, ponemos la celda D3, y, fijamos, y, como argumento resultado3, ponemos la celda E3, y, fijamos.

Quiere decir, que si el valor de la celda A2, no es igual a D1, ni a D2, pondrá el valor de D3.

Cerramos paréntesis.

=CAMBIAR(A2;$D$1;$E$1;$D$2;$E$2;$D$3;$E$3)


Si arrastramos, veremos que si la celda no coincide con el valor de las celdas D1, D2, o, D3, nos devuelve un error, cuando debería de devolver el valor de la celda A2, esto lo vamos a solucionar con SI.ERROR, donde preguntamos que si la función devuelve un error, que devuelva el rango A2.


=SI.ERROR(CAMBIAR(A2;$D$1;$E$1;$D$2;$E$2;$D$3;$E$3);A2)


También, podríamos convertir esta función en matricial, y, así no tenemos que arrastrar, para ello, cambiamos A2 por A2:A26.


=SI.ERROR(CAMBIAR(A2:A26;$D$1;$E$1;$D$2;$E$2;$D$3;$E$3);A2:A26)


Aceptamos, y, ya lo tenemos.



Miguel Angel Franco Garcia

 
 
 

Comments


© 2019 Miguel Ángel Franco García

bottom of page