Tenemos las siguientes cadenas:
Debemos de extraer de cada cadena los caracteres especiales.
En la celda B2, usamos LET, creamos una variable, usamos la función EXTRAE, como argumento texto, ponemos la celda A2, como argumento posición inicial, usamos la función SECUENCIA, omitimos el argumento filas, como argumento columnas, usamos la función LARGO, como argumento texto de LARGO, ponemos la celda A2, como argumento numero de caracteres, ponemos 1, y, probamos variable.
=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));1);a)
Hemos extraído cada carácter de la celda A2.
Usamos el argumento calculo de LET, usamos el operador lógico O, como argumento valor logico1, usamos el operador lógico Y, como argumento valor logico1, preguntamos si el código de la variable “a” es mayor o igual a 65 (A), como argumento valor logico2, preguntamos si el código de la variable “a” es menor o igual a 90 (Z), cerramos paréntesis del operador lógico Y.
=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));1);O(Y(CODIGO(a)>=65;CODIGO(a)<=90)
Como argumento valor logico2 del operador lógico O, ponemos otro operador lógico Y, como argumento valor logico1, preguntamos si el código de la variable “a” es mayor o igual a 97 (a), como argumento valor logico2, preguntamos si el código de la variable “a” es menor o igual a 122 (z).
=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));1);O(Y(CODIGO(a)>=65;CODIGO(a)<=90);Y(CODIGO(a)>=97;CODIGO(a)<=122)
Como argumento valor logico3 del operador lógico O, ponemos otro operador lógico Y, como argumento valor logico1, preguntamos si el código de la variable “a” es mayor o igual a 48 (0), como argumento valor logico2, preguntamos si el código de la variable “a” es menor o igual a 57 (9).
=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));1);O(Y(CODIGO(a)>=65;CODIGO(a)<=90);Y(CODIGO(a)>=97;CODIGO(a)<=122);Y(CODIGO(a)>=48;CODIGO(a)<=57)))
Obtenemos FALSO, vamos a invertir el valor con la función NO.
=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));1);NO(O(Y(CODIGO(a)>=65;CODIGO(a)<=90);Y(CODIGO(a)>=97;CODIGO(a)<=122);Y(CODIGO(a)>=48;CODIGO(a)<=57))))
Obtenemos VERDADERO, pero, debemos de trabajar con cada carácter, para ello, antes de la función NO, ponemos la función BYCOL, como argumento array, ponemos la variable “a”, como argumento función, ponemos LAMBDA, declaramos una variable, como argumento calculo de LAMBDA, es la función NO, pero, sustituimos la variable “a” por la variable “x”, de esta manera, trabajaremos con cada carácter.
=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));1);BYCOL(a;LAMBDA(x;NO(O(Y(CODIGO(x)>=65;CODIGO(x)<=90);Y(CODIGO(x)>=97;CODIGO(x)<=122);Y(CODIGO(x)>=48;CODIGO(x)<=57))))))
Tenemos una matriz desbordada en vertical con VERDADERO donde hay coincidencia, y, FALSO donde no la hay, es decir, donde hay caracteres especiales, ya que anteriormente, usamos la función NO para invertir los resultados.
Ahora, usamos el condicional SI, donde preguntamos que, si el resultado de BYCOL es igual a VERDADERO, que devuelva la variable “a”, en caso contrario, que ponga blanco.
=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));1);SI(BYCOL(a;LAMBDA(x;NO(O(Y(CODIGO(x)>=65;CODIGO(x)<=90);Y(CODIGO(x)>=97;CODIGO(x)<=122);Y(CODIGO(x)>=48;CODIGO(x)<=57)))));a;""))
Tenemos los caracteres especiales donde hay coincidencia, y, blanco donde no hay coincidencia.
Antes del condicional SI, usamos la función UNIRCADENAS, como argumento delimitador, entre comillas dobles, ponemos coma, ignoramos celdas vacías, como argumento texto1, es el condicional SI.
=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));1);UNIRCADENAS(",";VERDADERO;SI(BYCOL(a;LAMBDA(x;NO(O(Y(CODIGO(x)>=65;CODIGO(x)<=90);Y(CODIGO(x)>=97;CODIGO(x)<=122);Y(CODIGO(x)>=48;CODIGO(x)<=57)))));a;"")))
Ya tenemos los caracteres especiales de la cadena de la celda A2.
Vamos a convertir esta expresión en matricial para que nos devuelva los caracteres especiales de cada cadena, cosa que haremos con la función REDUCE, como argumento valor inicial, ponemos dobles comillas dobles, como argumento array, seleccionamos el rango A2:A10, como argumento función, ponemos LAMBDA, y, declaramos dos variables.
=REDUCE("";A2:A10;LAMBDA(x;y
Como argumento calculo de LAMBDA, ponemos la función APILARV, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, es la función LET, dentro de LET, sustituimos la celda A2 por la variable “y”.
=REDUCE("";A2:A10;LAMBDA(x;y;APILARV(x;LET(a;EXTRAE(y;SECUENCIA(;LARGO(y));1);UNIRCADENAS(",";VERDADERO;SI(BYCOL(a;LAMBDA(x;NO(O(Y(CODIGO(x)>=65;CODIGO(x)<=90);Y(CODIGO(x)>=97;CODIGO(x)<=122);Y(CODIGO(x)>=48;CODIGO(x)<=57)))));a;""))))))
Aceptamos, y, ya tenemos extraído los caracteres especiales de cada cadena.
Vamos a excluir la primera fila que está de más, para ello, antes de REDUCE, usamos la función EXCLUIR, como argumento matriz es la función REDUCE, como argumento filas, ponemos 1.
=EXCLUIR(REDUCE("";A2:A10;LAMBDA(x;y;APILARV(x;LET(a;EXTRAE(y;SECUENCIA(;LARGO(y));1);UNIRCADENAS(",";VERDADERO;SI(BYCOL(a;LAMBDA(x;NO(O(Y(CODIGO(x)>=65;CODIGO(x)<=90);Y(CODIGO(x)>=97;CODIGO(x)<=122);Y(CODIGO(x)>=48;CODIGO(x)<=57)))));a;""))))));1)
Miguel Angel Franco
Comments