top of page

Encontrar valores divisibles

Para el siguiente ejemplo, tenemos una serie de cadenas.















Debemos de dividir cada cifra, como sigue, tomemos la primera cantidad de ejemplo.


43085

La primera extracción es por una cifra, es decir:




La siguiente extracción es por dos cifras.




Aparecen numero de una sola cifra porque es un numero impar, y, no se puede realizar una asociación.


La siguiente extracción es por tres cifras.




La siguiente extracción es por cuatro cifras.




Y, la última extracción es por cinco cifras.




Debemos de encontrar los números divisibles por el valor indicado en B2.


Empecemos…


En la celda C2, usamos LET, creamos una variable, usamos EXTRAE, como argumento texto es la celda A2, como argumento posición inicial, usamos SECUENCIA, omitimos le argumento filas, como argumento columnas, usamos LARGO, como argumento de LARGO, seleccionamos la celda A2, como argumento número de caracteres, volvemos a usar SECUENCIA, solo usamos le argumento filas, que vuelve a ser LARGO de A2, probamos variable.


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


Vamos a obtener una matriz desbordada de cinco columnas, que es la longitud de la celda A2, en cada fila, obtenemos la extracción por 1, 2, 3, 4, y, 5 caracteres.








Vemos que, en algunas filas, aparecen cadenas que no corresponden, porque al ser un numero impar, no pueden realizarse asociaciones por dicha longitud.








Para trabajar mas cómodo, seria interesante trabajar con los datos necesarios, vamos a crear otra variable, usamos SECUENCIA, como argumento filas, es la función LARGO de A2.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;SECUENCIA(LARGO(A2));b)


Obtenemos una matriz desbordada en vertical desde el numero 1 al número 5.








Preguntamos con el condicional SI, que, si la longitud de la variable “a” es igual a la función SECUENCIA, que nos devuelva la variable “a”, en caso contrario, que devuelva un error.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;SI(LARGO(a)=SECUENCIA(LARGO(A2));a;NOD());b)


Obtenemos una matriz desbordada con los valores que corresponden con la longitud, y, error donde no hay coincidencia.







Usamos la función ENCOL, y, usamos el argumento ignorar, ponemos 3, es decir, ignorar blancos, y, errores.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;ENCOL(SI(LARGO(a)=SECUENCIA(LARGO(A2));a;NOD());3);b)
















Los números quedan alineados a la izquierda, quiere decir que están en formato de texto, usamos la función ABS para obtener el valor absoluto.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;ABS(ENCOL(SI(LARGO(a)=SECUENCIA(LARGO(A2));a;NOD());3));b)


Ya lo tenemos en formato de número, vemos que quedan alineados a la derecha.




















El numero 85 aparece dos veces, porque cuando estaban en formato de texto, aparecía 085, y, 85, pues, usamos UNICOS para quedarnos con los valores únicos.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;UNICOS(ABS(ENCOL(SI(LARGO(a)=SECUENCIA(LARGO(A2));a;NOD());3)));b)


Ordenamos para ver los datos más claros.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;ORDENAR(UNICOS(ABS(ENCOL(SI(LARGO(a)=SECUENCIA(LARGO(A2));a;NOD());3))));b)


Aparece el valor cero, que no nos interesa, creamos otra variable, filtramos la variable “b”, siempre que dicha variable sea diferente a cero.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;ORDENAR(UNICOS(ABS(ENCOL(SI(LARGO(a)=SECUENCIA(LARGO(A2));a;NOD());3))));c;FILTRAR(b;b<>0);c)

















Creamos otra variable, nos quedamos con la parte entera de dividir la variable “c” entre B2.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;ORDENAR(UNICOS(ABS(ENCOL(SI(LARGO(a)=SECUENCIA(LARGO(A2));a;NOD());3))));c;FILTRAR(b;b<>0);d;ENTERO(c/B2);d)


Estamos dividiendo cada valor de la variable “C” entre el divisor de B2, y, nos quedamos con la parte entera.


Restamos el valor de B2 a la expresión anterior.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;ORDENAR(UNICOS(ABS(ENCOL(SI(LARGO(a)=SECUENCIA(LARGO(A2));a;NOD());3))));c;FILTRAR(b;b<>0);d;B2-ENTERO(c/B2);d)


Dividimos la variable “c” entre la expresión anterior.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;ORDENAR(UNICOS(ABS(ENCOL(SI(LARGO(a)=SECUENCIA(LARGO(A2));a;NOD());3))));c;FILTRAR(b;b<>0);d;c/B2-ENTERO(c/B2);d)















Aquellos valores que son cero son los divisibles por el valor de la celda B2, vamos a usar el argumento calculo de LET, filtramos la variable “c”, siempre que la variable “d” sea igual a cero.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;ORDENAR(UNICOS(ABS(ENCOL(SI(LARGO(a)=SECUENCIA(LARGO(A2));a;NOD());3))));c;FILTRAR(b;b<>0);d;c/B2-ENTERO(c/B2);FILTRAR(c;d=0))


Ya tenemos las cadenas divisibles por el valor de la celda B2.









Usamos UNIRCADENAS, como argumento delimitador, entre comillas dobles, ponemos coma, ignoramos celdas vacías, como argumento texto1, es la función FILTRAR.


=LET(a;EXTRAE(A2;SECUENCIA(;LARGO(A2));SECUENCIA(LARGO(A2)));b;ORDENAR(UNICOS(ABS(ENCOL(SI(LARGO(a)=SECUENCIA(LARGO(A2));a;NOD());3))));c;FILTRAR(b;b<>0);d;c/B2-ENTERO(c/B2);UNIRCADENAS(",";VERDADERO;FILTRAR(c;d=0)))


Aceptamos, arrastramos, y, ya lo tenemos.
















Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page