top of page

Separar palabras dentro de una cadena

Para el siguiente ejemplo, nos dan una serie de caracteres, que son nombres, cada palabra lo separa una letra mayúscula, por ejemplo, en el siguiente nombre vemos El corte ingles, seguido de Aspiradora.




Pues debemos de separar, en este caso, ambos nombres, es decir, en una celda debe de aparecer Elcorteingles, y, en otra celda debe de aparecer Aspiradora.


Tenemos los siguientes datos de ejemplos.








Lo primero que vamos a hacer es extraer cada carácter, cosa que ya hemos hecho, lo haremos con la función EXTRAE, como argumento texto, es la celda A2.


=EXTRAE(A2


Como argumento posición inicial, usamos la función SECUENCIA, y, como argumento filas de SECUENCIA, usamos la función LARGO, y, como argumento de LARGO, ponemos la celda A2.


=EXTRAE(A2;SECUENCIA(LARGO(A2))


Como argumento número de posición, ponemos 1.


Cerramos paréntesis.


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


Obtenemos una matriz desbordada en vertical con cada carácter del valor de la celda A2.
















Con la función CODIGO, vamos a obtener el código ASCII al que pertenece cada carácter, ya sabemos, que cada carácter en EXCEL lleva asociado un código.


Debemos de localizar donde se encuentran las letras mayúsculas, la letra A le corresponde el código 65, y, a la ultima letra del alfabeto (Z) le corresponde el código 90.


= CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1))














Como vamos a usar el operador lógico Y, porque vamos a realizar dos preguntas, y, vamos a actuar sobre una matriz, para poder usar el operador lógico Y de forma matricial, debemos de hacer uso de la función BYROW.


Ponemos BYROW, como argumento array, es la expresión anterior.


=BYROW(CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1))


Como argumento función, ponemos LAMBDA, declaramos una variable, esta variable almacena el argumento array.


=BYROW(CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1));LAMBDA(x


Como argumento calculo de LAMBDA, usamos el condicional SI, como argumento prueba lógica del condicional SI, usamos el operador lógico Y, como argumento valor logico1, preguntamos si la variable “x” es mayor o igual a 65, como argumento valor logico2, preguntamos si el valor de la variable “x”, es menor o igual a 90.


Cerramos paréntesis del operador lógico Y.


=BYROW(CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1));LAMBDA(x;SI(Y(x>=65;x<=90)


Como argumento valor si verdadero del condicional SI, entre comillas dobles ponemos una barra inclinada, y, concatenamos con la función CARÁCTER, y, como argumento es la variable “x”.


=BYROW(CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1));LAMBDA(x;SI(Y(x>=65;x<=90);"/"&CARACTER(x)


Como argumento valor si falso, volvemos a usar la función CARÁCTER.


Cerramos paréntesis.


=BYROW(CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1));LAMBDA(x;SI(Y(x>=65;x<=90);"/"&CARACTER(x);CARACTER(x))))


Aceptamos, tenemos una matriz desbordada en vertical, con cada carácter, pero donde el carácter es mayúscula, aparece con una barra inclinada.
















¿Por qué una barra inclinada?

Como he dicho anteriormente, la letra mayúscula indica el corte, es decir, donde se debe de realizar la separación entra palabra y palabra, es la forma, después de mucho pensar, que se me ha ocurrido para localizar el corte.


Seguimos…


Ahora, vamos a usar la función UNIRCADENAS, donde como argumento delimitador, ponemos dobles comillas dobles, es decir, nada.


=UNIRCADENAS(""


Ignoramos celdas vacías.


Como argumento texto1, es la expresión anterior.


Cerramos paréntesis.


=UNIRCADENAS("";VERDADERO;BYROW(CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1));LAMBDA(x;SI(Y(x>=65;x<=90);"/"&CARACTER(x);CARACTER(x)))))


Aceptamos, y, ya tenemos, en este caso, las dos palabras separadas.






Pero, queremos cada palabra en una celda, para ello, vamos a sustituir la barra inclinada por un espacio en blanco, para ello, usaremos la función SUSTITUIR.


=SUSTITUIR(DIVIDIRTEXTO(UNIRCADENAS("";VERDADERO;BYROW(CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1));LAMBDA(x;SI(Y(x>=65;x<=90);"/"&CARACTER(x);CARACTER(x)))));" ");"/";" ")






Si nos fijamos, vemos que la primera letra por la izquierda (B) no esta pegada a la izquierda, vemos que hay un espacio, espacio que está de más, por lo que vamos a usar la función ESPACIOS para quitar los espacios sobrantes.


=ESPACIOS(SUSTITUIR(UNIRCADENAS("";VERDADERO;BYROW(CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1));LAMBDA(x;SI(Y(x>=65;x<=90);"/"&CARACTER(x);CARACTER(x)))));"/";" "))


Ahora, usamos la función DIVIDIRTEXTO, donde como argumento texto, es la expresión anterior, como argumento delimitador de columna, ponemos un espacio, y, cerramos paréntesis.


=DIVIDIRTEXTO(ESPACIOS(SUSTITUIR(UNIRCADENAS("";VERDADERO;BYROW(CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1));LAMBDA(x;SI(Y(x>=65;x<=90);"/"&CARACTER(x);CARACTER(x)))));"/";" "));" ")


Pues, ya lo tenemos podemos ver como el valor de la celda A2, ha sido separada en dos palabras, cada palabra en una celda.




Arrastramos, y, vemos como todas las palabras han sido separadas correctamente.





Vamos a añadir dos palabras mas al valor de la celda A2, y, vemos como se separan correctamente.







Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page