Extraer los últimos números impares
- Jaime Franco Jimenez
- 17 abr 2023
- 3 Min. de lectura
Veamos otro desafío de Excel BI, dicho desafío consiste en que tenemos una serie de números separados por coma.

Tenemos otra columna, llamada n, donde tenemos un número.

El desafío consiste en extraer los últimos números impares que indica la columna n, por ejemplo, en la primera fila tenemos los números 1, 2, 3, 4, 5, y, 6, en la columna n, tenemos el numero 2, pues, se deben de extraer los números 3, y, 5.
Pero, hay que tener en cuenta las siguientes reglas:
Si n = 0, entonces no se extraería nada.
Si n > número de números impares en la columna Números, se extraerán todos los números impares.
Pues, comencemos…
Vamos a usar la función DIVIDIRTEXTO, para extraer cada carácter, donde como argumento texto, seleccionamos la celda A2, como argumento delimitador de columna, entre comillas dobles, ponemos coma.
Cerramos paréntesis.
=DIVIDIRTEXTO(A2;",")
Aceptamos, y, tenemos una matriz desbordada en horizontal con cada valor.

Pero vemos que se alinean a la izquierda, quiere decir que esta en formato de texto, y, lo necesitamos en formato de número, para ello, después del signo igual, usamos ABS que nos devuelve el valor absoluto de un valor, esta función solo tiene un argumento que es número, pues, dicho argumento es la función DIVIDIRTEXTO.
=ABS(DIVIDIRTEXTO(A2;","))
Vemos como ahora se ha alineado a la derecha.

Usamos la función ES.IMPAR, aplicado a la expresión anterior.
=ES.IMPAR(ABS(DIVIDIRTEXTO(A2;",")))
Obtenemos una matriz desbordada con VERDADERO donde el valor es impar, y, FALSO donde no lo es.

Ahora, con el condicional SI, vamos a preguntar que si ES.IMPAR es igual a VERDADERO, en ese caso, que nos devuelva la función DIVIDIRTEXTO, junto con la función ABS, en caso contrario, que nos devuelva un texto en blanco.
=SI(ES.IMPAR(ABS(DIVIDIRTEXTO(A2;",")));ABS(DIVIDIRTEXTO(A2;","));"")
Aceptamos, y, vemos que tenemos blanco donde no lo es impar, y, el numero donde es impar.

Para la primera fila, debemos de quedarnos con los dos últimos números impares.

Si volvemos al planteamiento del problema, debemos de tener en cuenta:
Si n = 0, entonces no se extraería nada.
Si n > número de números impares en la columna Números, se extraerán todos los números impares.
Quiere decir que la expresión anterior, la vamos a usar mas de una vez, por lo que vamos a usar LET, donde creamos una variable, y, almacenamos la expresión anterior.
=LET(a;SI(ES.IMPAR(ABS(DIVIDIRTEXTO(A2;",")));DIVIDIRTEXTO(A2;",");"")
Como argumento calculo, vamos a preguntar con el condicional SI, que, si el valor de B2 es igual a 0, que nos devuelva un texto en blanco.
=LET(a;SI(ES.IMPAR(ABS(DIVIDIRTEXTO(A2;",")));DIVIDIRTEXTO(A2;",");"");SI(B2=0;""
Como argumento valor si verdadero, volvemos a preguntar, en este caso, si el valor de la celda B2 es mayor al número de números impares, para ello, usamos CONTAR, y, como argumento ponemos la variable A, pero usamos la función UNIRCADENAS, donde como argumento delimitador, entre comillas dobles, ponemos coma, en la siguiente ventana, ignoramos celdas vacías, y, como argumento texto1, es la variable A.
=LET(a;SI(ES.IMPAR(ABS(DIVIDIRTEXTO(A2;",")));ABS(DIVIDIRTEXTO(A2;","));"");SI(B2=0;"";SI(B2>CONTAR(a);UNIRCADENAS(",";VERDADERO;a))))
En caso de que no se cumplan ninguna de las dos condiciones anteriores, nos debe de devolver los últimos números impares especificados en la celda B2, para ello, primero, ordenamos, después usamos la función K.ESIMO.MAYOR, donde como argumento matriz es la variable A, y, como argumento K, usamos SECUENCIA, donde como argumento filas, ponemos el valor de la celda B2.
Cerramos paréntesis.
=LET(a;SI(ES.IMPAR(ABS(DIVIDIRTEXTO(A2;",")));ABS(DIVIDIRTEXTO(A2;","));"");SI(B2=0;"";SI(B2>CONTAR(a);UNIRCADENAS(",";VERDADERO;a);ORDENAR(K.ESIMO.MAYOR(a;SECUENCIA(B2))))))
Antes de la función ORDENAR; volvemos a usar UNIRCADENAS.
=LET(a;SI(ES.IMPAR(ABS(DIVIDIRTEXTO(A2;",")));ABS(DIVIDIRTEXTO(A2;","));"");SI(B2=0;"";SI(B2>CONTAR(a);UNIRCADENAS(",";VERDADERO;a);UNIRCADENAS(",";VERDADERO;ORDENAR(K.ESIMO.MAYOR(a;SECUENCIA(B2)))))))
Aceptamos, y, ya tenemos nuestro desafío resuelto.
Si vamos probando con el valor cero, un valor dentro de los números impares que hay, y, un número mayor al número de números impares que hay, veremos que los resultados son correctos.
Arrastramos, y, ya hemos terminado.
Miguel Angel Franco
Comments