Extraer texto entre comillas
- Jaime Franco Jimenez
- 4 abr 2024
- 3 Min. de lectura
Tenemos las siguientes sentencias:
Debemos de extraer las cadenas que estén entre comillas.
En la celda B2, usamos LET, creamos una variable, usamos la funcion EXTRAE, como argumento texto, ponemos la celda A2, como argumento posición inicial, usamos a funcion LARGO, como argumento ponemos la celda A2, como argumento número de caracteres, ponemos 1.
Vamos a extraer cada carácter del valor de la celda A2.
=LET(a;EXTRAE(A2;SECUENCIA(LARGO(A2));1);a)
Antes de EXTRAE, usamos la funcion CODIGO para que nos devuelva el código al que corresponde cada carácter.
=LET(a;CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1));a)
Creamos otra variable, usamos la funcion SECUENCIA, como argumento filas, usamos la funcion CONTARA, y, como argumento ponemos la variable “a”.
Tenemos una matriz desbordada en vertical empezando desde el número 1.
=LET(a;CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1));b;SECUENCIA(CONTARA(a));b)
El código 34 corresponde a las dobles comillas, pues, vamos a buscar dichas comillas en la variable “a”, para ello, creamos otra variable, usamos la función ENFILA, como argumento matriz, usamos el condicional SI, como argumento prueba lógica, preguntamos si la variable “a” es igual a 34, como argumento valor si verdadero, ponemos la variable “b”, como argumento valor si falso, ponemos un error, como argumento ignorar de ENFILA, seleccionamos 3, es decir, ignorar blancos y errores.
=LET(a;CODIGO(EXTRAE(A7;SECUENCIA(LARGO(A7));1));b;SECUENCIA(CONTARA(a));c;ENFILA(SI(a=34;b;NOD());3);c)
Tenemos una matriz desbordada en horizontal con la posición donde se encuentran las comillas dobles.
Las posiciones que hemos obtenido corresponden a las comillas tanto de apertura como de cierre, quiere decir que 6 y 32 son las comillas dobles de apertura y de cierre, y, los valores 34 y 47, tambien, corresponden a las comillas dobles de apertura y de cierre, debemos de fijarnso en las comillas de apertura que es donde debemos de empezar a extraer, pero en una posicion mas, para que empiece a extraer desde el primer carácter, por lo que el punto de partida es 7 y 35.
Creamos otra variable, volvemos a usar la funcion SECUENCIA, omitmos el argumento filas, como argumento columnas, usamos la funcion CONTARA, y, como argumento, ponemos la variable “c”.
=LET(a;CODIGO(EXTRAE(A7;SECUENCIA(LARGO(A7));1));b;SECUENCIA(CONTARA(a));c;ENFILA(SI(a=34;b;NOD());3);d;SECUENCIA(;CONTARA(c));d)
Tenemos una matriz desbordada en horizontal desde el numero 1 al numero 4 para este caso.
Creamos otra variable, usamos la funcion FILTRAR, como argumento array, ponemos la variable “c”, como argumento include, ponemos la funcion ES.IMPAR, como argumento numero, ponemos la variable “d”, cerramos parentisis, y, sumamos 1.
=LET(a;CODIGO(EXTRAE(A7;SECUENCIA(LARGO(A7));1));b;SECUENCIA(CONTARA(a));c;ENFILA(SI(a=34;b;NOD());3);d;SECUENCIA(;CONTARA(c));e;FILTRAR(c;ES.IMPAR(d))+1;e)
Tenemos en horizontal los puntos de partidas.
Creamos otra variable, volvemos a usar la función FILTRAR, como argumento array, ponemos la variable “c”, como argumento include, ponemos la función ES.PAR, como argumento número, ponemos la variable “d”, cerramos paréntesis, y, restamos 1.
=LET(a;CODIGO(EXTRAE(A7;SECUENCIA(LARGO(A7));1));b;SECUENCIA(CONTARA(a));c;ENFILA(SI(a=34;b;NOD());3);d;SECUENCIA(;CONTARA(c));e;FILTRAR(c;ES.IMPAR(d))+1;f;FILTRAR(c;ES.PAR(d ))-1;f)
Tenemos donde deben de terminar.
Usamos el argumento calculo de LET, a la variable “f”, le restamos la variable “e”, y, sumamos 1.
=LET(a;CODIGO(EXTRAE(A7;SECUENCIA(LARGO(A7));1));b;SECUENCIA(CONTARA(a));c;ENFILA(SI(a=34;b;NOD());3);d;SECUENCIA(;CONTARA(c));e;FILTRAR(c;ES.IMPAR(d))+1;f;FILTRAR(c;ES.PAR(d ))-1;f-e+1)
Obtenemos los caracteres a extraer.
Antes de la resta, usamos la función EXTRAE, como argumento texto, ponemos la celda A7, como argumento posición inicial, ponemos la variable “e”, que es donde debe de empezar a extraer, como argumento numero de caracteres, es la resta.
=LET(a;CODIGO(EXTRAE(A7;SECUENCIA(LARGO(A7));1));b;SECUENCIA(CONTARA(a));c;ENFILA(SI(a=34;b;NOD());3);d;SECUENCIA(;CONTARA(c));e;FILTRAR(c;ES.IMPAR(d))+1;f;FILTRAR(c;ES.PAR(d ))-1;EXTRAE(A7;e;f-e+1))
Ya tenemos las cadenas que se encuentran entre comillas dobles extraídas.
Podemos dejar el resultado tal cual esta, o, podemos usar la función UNIRCADENAS antes de EXTRAE, como argumento delimitador, entre comillas dobles, ponemos coma y dejamos un espacio, ignoramos celdas vacías, u, omitimos el argumento, como argumento texto1, es la función EXTRAE.
Antes de UNIRCADENAS, usamos la función SI.ERROR, porque hay cadenas que no tienen comillas dobles, como argumento valor, es la función UNIRCADENAS, como argumento valor si error, ponemos blanco.
Cambiamos A7 por A2.
=LET(a;CODIGO(EXTRAE(A2;SECUENCIA(LARGO(A2));1));b;SECUENCIA(CONTARA(a));c;ENFILA(SI(a=34;b;NOD());3);d;SECUENCIA(;CONTARA(c));e;FILTRAR(c;ES.IMPAR(d))+1;f;FILTRAR(c;ES.PAR(d ))-1;SI.ERROR(UNIRCADENAS(", ";VERDADERO;EXTRAE(A2;e;f-e+1));""))
Aceptamos, arrastramos, y, ya lo tenemos.
Miguel Angel Franco
Comments