top of page

Máximo y minimo

Tenemos una serie de expresiones, en cada expresión, hay letras y números.














Debemos de añadir dos nuevas columnas, donde en la primera columna, debe de aparecer el valor mínimo, y, en la segunda columna, debe de aparecer el valor máximo.


El modelo debe de quedar como sigue:















En la celda B3, usamos LET, creamos una variable, usamos EXTRAE, como argumento texto, seleccionamos la celda A3, como argumento posición inicial, usamos SECUENCIA, como argumento filas, usamos LARGO, como argumento texto de LARGO, ponemos la celda A3, como argumento numero de caracteres, ponemos 1.


Probamos variable.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);a)


Tenemos cada carácter de la celda A3 en celdas independientes.

















Ya sabemos que cada carácter en Excel le corresponde un código, es lo que se conoce como UniCode, o, Código ASCII, bien, al numero 0 le corresponde el código 48, y, al numero 9, le corresponde el código 57.


Vamos a crear otra variable, abrimos paréntesis, usamos la función CODIGO, como argumento texto, ponemos la variable “a”, comparamos con mayor o igual a 48, cerramos paréntesis, ponemos el símbolo de asterisco, abrimos otro paréntesis, volvemos a poner la función CODIGO y comparamos con menor o igual a 57, cerramos paréntesis.


Vamos a comparar el código de cada letra si esta entre 48 y 57, es decir, si es un número.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);b;(CODIGO(a)>=48)*(CODIGO(a)<=57);b)

 

Obtenemos 0 donde no hay coincidencia, y, 1 donde la hay.

















Vamos por otra variable, usamos el condicional SI, preguntamos que, si la variable “b” es igual a 1, que devuelva la variable “a”, en caso contrario, que devuelva blanco.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);b;(CODIGO(a)>=48)*(CODIGO(a)<=57);c;SI(b;a;"");c)

 

Obtenemos las cadenas de números, pero, en formato de texto, vemos como queda alineados a la izquierda.
















Creamos otra variable, usamos UNIRCADENAS, como argumento delimitador, entre comillas dobles, ponemos la barra inclinada, como argumento ignorar vacías, seleccionamos incluir celdas vacías, como argumento texto1, ponemos la variable “c”.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);b;(CODIGO(a)>=48)*(CODIGO(a)<=57);c;SI(b;a;"");d;UNIRCADENAS("/";FALSO;c);d)


Vamos a obtener cada numero junto con una barra inclinada, y, donde había espacio, aparece dos barras inclinadas.






Creamos otra variable, usamos DIVIDIRTEXTO, como argumento texto, ponemos la variable “d”, ignoramos el argumento delimitador de columna, como argumento delimitador de fila, entre comillas dobles, ponemos doble barra inclinada.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);b;(CODIGO(a)>=48)*(CODIGO(a)<=57);c;SI(b;a;"");d;UNIRCADENAS("/";FALSO;c);e;DIVIDIRTEXTO(d;;"//");e)

 

Tenemos cada conjunto de números en celdas independientes separados por barra inclinada, junto con una celda en blanco.








Volvemos a la expresión de la variable “e” antes de DIVIDIRTEXTO, usamos SUSTITUIR, como argumento texto, es la función DIVIDIRTEXTO, como texto antiguo, entre comillas dobles, ponemos la barra inclinada, como texto nuevo, ponemos dobles comillas dobles, es decir, nada.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);b;(CODIGO(a)>=48)*(CODIGO(a)<=57);c;SI(b;a;"");d;UNIRCADENAS("/";FALSO;c);e;SUSTITUIR(DIVIDIRTEXTO(d;;"//");"/";"");e)

 

Vamos a obtener los números, pero, en formato de texto, vemos como quedan alineados a la izquierda.









Pues, multiplicamos por 1.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);b;(CODIGO(a)>=48)*(CODIGO(a)<=57);c;SI(b;a;"");d;UNIRCADENAS("/";FALSO;c);e;SUSTITUIR(DIVIDIRTEXTO(d;;"//");"/";"")*1;e)

 

Ya tenemos los números en formato de número, pero, donde no había nada aparece error.








Usamos la función SI.ERROR, como argumento valor es la función SUSTITUIR, como argumento valor si error, ponemos blanco.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);b;(CODIGO(a)>=48)*(CODIGO(a)<=57);c;SI(b;a;"");d;ESPACIOS(UNIRCADENAS("/";FALSO;c));e;SI.ERROR(SUSTITUIR(DIVIDIRTEXTO(d;;"//");"/";"")*1;"");e)

 

Vamos a quitar los blancos de más, creamos otra variable, usamos FILTRAR, como argumento array ponemos la variable “e”, como argumento include, ponemos la variable “e” y comparamos con distinto a blanco.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);b;(CODIGO(a)>=48)*(CODIGO(a)<=57);c;SI(b;a;"");d;ESPACIOS(UNIRCADENAS("/";FALSO;c));e;SI.ERROR(SUSTITUIR(DIVIDIRTEXTO(d;;"//");"/";"")*1;"");f;FILTRAR(e;e<>"");f)


Usamos el argumento calculo de LET, como argumento matriz1, ponemos la función MIN, como argumento ponemos la variable “f”, como argumento matriz2, ponemos la función MAX, y, como argumento ponemos la variable “f”.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);b;(CODIGO(a)>=48)*(CODIGO(a)<=57);c;SI(b;a;"");d;ESPACIOS(UNIRCADENAS("/";FALSO;c));e;SI.ERROR(SUSTITUIR(DIVIDIRTEXTO(d;;"//");"/";"")*1;"");f;FILTRAR(e;e<>"");APILARH(MIN(f);MAX(f)))

 

Aceptamos, y, parece que ya lo tenemos.





Arrastramos.

















Es correcto que lo tenemos, pero, vemos que donde solo hay un valor, aparece en las dos columnas, pues, vamos a la expresión del argumento cálculo de LET, en el argumento matriz2 de APILARH, usamos el condicional SI, preguntamos que, si el valor mínimo es igual al valor máximo, que ponga blanco, en caso contrario, que ponga el valor máximo.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);b;(CODIGO(a)>=48)*(CODIGO(a)<=57);c;SI(b;a;"");d;ESPACIOS(UNIRCADENAS("/";FALSO;c));e;SI.ERROR(SUSTITUIR(DIVIDIRTEXTO(d;;"//");"/";"")*1;"");f;FILTRAR(e;e<>"");APILARH(MIN(f);SI(MIN(f)=MAX(f);"";MAX(f))))

 

Aceptamos, arrastramos, y, vemos que el valor que aparecía dos veces ya solo aparece una vez.

















Pero, tenemos un error de cálculo, porque en esa celda, no hay números, pues, usamos SI.ERROR, y, ponemos blanco en caso de error.


=LET(a;EXTRAE(A3;SECUENCIA(LARGO(A3));1);b;(CODIGO(a)>=48)*(CODIGO(a)<=57);c;SI(b;a;"");d;ESPACIOS(UNIRCADENAS("/";FALSO;c));e;SI.ERROR(SUSTITUIR(DIVIDIRTEXTO(d;;"//");"/";"")*1;"");f;FILTRAR(e;e<>"");SI.ERROR(APILARH(MIN(f);SI(MIN(f)=MAX(f);"";MAX(f)));""))


Aceptamos, arrastramos, y, ahora si lo tenemos.
















Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page