top of page

Reporte números pares e impares

Tenemos los siguientes datos:


















Debemos de crear un reporte si los números de impares de cada cadena es impar, y, si los números pares de cada cadena es par, por ejemplo, 70505500 - los dígitos impares son 7 y 5 y aparecen 1 y 3 veces, la suma de ambos números es de 4, por lo tanto, no es un numero impar, por lo que no es válido. 0 aparece 4 veces, por lo tanto, es válido para dígitos pares, pero, como no se cumplen las dos condiciones, no es válido.


Empecemos…


Usamos la función LARGO, como argumento seleccionamos el rango A2:A10.


=LARGO(A2:A10)


Obtenemos una matriz desbordada en vertical con la longitud de cada cadena.









Nos quedamos con el valor máximo.


=MAX(LARGO(A2:A10))


Nos devuelve 21.


Usamos LET, creamos una variable, la llamaremos extraer, usamos la función EXTRAE, como argumento texto, seleccionamos el rango A2:A10, como argumento posición inicial, usamos la función SECUENCIA, omitimos el argumento filas, como argumento columnas, es la función LARGO usada anteriormente, como argumento número de caracteres, ponemos 1, probamos variable.


Obtenemos una matriz desbordada con cada carácter de cada cadena.











Creamos otra variable, la llamaremos par, usamos la función MAP, como argumento array es la variable extraer, como argumento función, ponemos LAMBDA, declaramos una variable que almacena el argumento array, preguntamos si es par la variable “x”, pero, usamos el doble signo negativo, para que en vez de que nos devuelva VERDADERO, o, FALSO, nos devuelva 1 y 0.


Probamos variable.


=LET(extraer;EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1);par;MAP(extraer;LAMBDA(x;--ES.PAR(x)));par)


Obtenemos una matriz desbordada con 1 donde es par, cero donde no lo es, y, error donde no hay ninguna coincidencia.












Usamos la función SI.ERROR, para quitar el error, y, ponemos un texto en blanco.


=LET(extraer;EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1);par;SI.ERROR(MAP(extraer;LAMBDA(x;--ES.PAR(x)));"");par)


Creamos otra variable, la llamaremos total_par, usamos la función BYROW, como argumento array, ponemos la variable par, como argumento función, ponemos LAMBDA, declaramos una variable, sumamos la variable, probamos variable.


Obtenemos una matriz desbordada con la cantidad de números pares que hay en cada cadena, nos interesa aquellos valores que son pares.












Debemos de declarar otras dos variables, la expresión es la misma que las dos expresiones anteriores, lo único que cambia es la función ES.PAR por ES.IMPAR.


=LET(extraer;EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1);par;SI.ERROR(MAP(extraer;LAMBDA(x;--ES.PAR(x)));"");total_par;BYROW(par;LAMBDA(x;SUMA(x)));impar;SI.ERROR(MAP(extraer;LAMBDA(x;--ES.IMPAR(x)));"");total_impar;BYROW(impar;LAMBDA(x;SUMA(x)))


Como argumento calculo de LET, usamos la función APILARH, como argumento matriz1, es la variable total_par, como argumento matriz2, ponemos la variable total_impar.


=LET(extraer;EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1);par;SI.ERROR(MAP(extraer;LAMBDA(x;--ES.PAR(x)));"");total_par;BYROW(par;LAMBDA(x;SUMA(x)));impar;SI.ERROR(MAP(extraer;LAMBDA(x;--ES.IMPAR(x)));"");total_impar;BYROW(impar;LAMBDA(x;SUMA(x)));APILARH(total_par;total_impar))


Obtenemos una matriz desbordada de dos columnas, en la primera columna, tenemos la cantidad de números pares de cada cadena, en la segunda columna, tenemos la cantidad de números impares de cada cadena.


Vamos a sumar ambas columnas, para ello, usamos la función BYROW, como argumento array, es la función APILARH, como argumento función, ponemos LAMBDA, creamos una variable, sumamos la variable.


=LET(extraer;EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1);par;SI.ERROR(MAP(extraer;LAMBDA(x;--ES.PAR(x)));"");total_par;BYROW(par;LAMBDA(x;SUMA(x)));impar;SI.ERROR(MAP(extraer;LAMBDA(x;--ES.IMPAR(x)));"");total_impar;BYROW(impar;LAMBDA(x;SUMA(x)));BYROW(APILARH(total_par;total_impar);LAMBDA(x;SUMA(x))))


Obtenemos una matriz desbordada con la suma de ambas columnas.












Nos interesa donde la suma es impar, quiere decir, que el numero de valores impares es impar, y, el numero de valores pares es par, por lo que usamos la función FILTRAR, como argumento array, seleccionamos el rango A2:A10, como argumento include, ponemos la función ES.IMPAR, como argumento de ES.IMPAR es la función BYROW, e, igualamos a VERDADERO.


=LET(extraer;EXTRAE(A2:A10;SECUENCIA(;MAX(LARGO(A2:A10)));1);par;SI.ERROR(MAP(extraer;LAMBDA(x;--ES.PAR(x)));"");total_par;BYROW(par;LAMBDA(x;SUMA(x)));impar;SI.ERROR(MAP(extraer;LAMBDA(x;--ES.IMPAR(x)));"");total_impar;BYROW(impar;LAMBDA(x;SUMA(x)));FILTRAR(A2:A10;ES.IMPAR(BYROW(APILARH(total_par;total_impar);LAMBDA(x;SUMA(x))))=VERDADERO))


Aceptamos, y, ya tenemos las cantidades cuya cantidad de cifras pares es par, y, cuya cantidad de cifras impares es impar en cada cadena.











Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page