martes, 2 de agosto de 2016

Separar valor numérico de unidad de medida de un texto

En alguna ocasión, más de las que me gustaría haber visto, me he encontrado con usuarios que a la hora de introducir registros de información, insertan en una celda el valor numérico seguido por la unidad de medida...
Algo así:
850,50 Kg

El problema que genera esto es obvio... ese dato es inoperable al tratarlo Excel como un texto.


La cuestión de hoy será cómo recuperar el valor numérico de esa celda.
Mostraremos en este post tres maneras distintas de conseguir el dato.



Posiblemente la fórmula más simple sea:
=VALOR(IZQUIERDA(A1;ENCONTRAR(" ";A1)))

donde trabajamos con funciones típicas de texto como IZQUIERDA, ENCONTRAR y la útil VALOR.
Con ENCONTRAR localizamos el espacio que separa el valor numérico de la unidad de medida, y a partir de ese punto, con IZQUIERDA recuperamos los caracteres numéricos.. finalmente con VALOR convertimos en número ese 'texto numérico'


Otra función, algo más elaborada y matricial! sería:
=MAX(SI.ERROR(--IZQUIERDA(A1;FILA(INDIRECTO("1:"&LARGO(A1))));0))

la clave es la parte profunda de la fórmula:
--IZQUIERDA(A1;FILA(INDIRECTO("1:"&LARGO(A1))))
con la que, matricialmente, llegamos a esto:
{8;85;850;850;850,5;850,5;850,5;#¡VALOR!;#¡VALOR!}
es decir, repasa 'in crescendo' todos los caracteres de la celda, uno por uno.
Con los dos signos negativos antes de IZQUIERDA forzamos lo lea como número cuando así lo sea, en caso contrario tendríamos el error de #¡VALOR! (como se ve en el matriz de constantes anterior).
Este error lo tratamos con la función SI.ERROR:
SI.ERROR(--IZQUIERDA(A1;FILA(INDIRECTO("1:"&LARGO(A1))));0)
que devuelve la matriz corregida:
{8;85;850;850;850,5;850,5;850,5;0;0}
para finalmente aplicarle la función MAX para retornar el valor buscado.


Una alternativa más (y seguro hay muchas más):
=-BUSCAR(1;-IZQUIERDA(A1;FILA(INDIRECTO("1:"&LARGO(A1)))))

similar a la anterior, ya que con la misma estructura
-IZQUIERDA(A1;FILA(INDIRECTO("1:"&LARGO(A1))))
conseguimos la matriz de constantes:
{-8;-85;-850;-850;-850,5;-850,5;-850,5;#¡VALOR!;#¡VALOR!}

Sobre esta matriz NO ordenada en sentido ascendente (tal como requiere el uso de esta función BUSCAR), buscar el elemento 1 (en realidad cualquier valor), tiene el efecto de devolver el último de los valores, esto es, el valor numérico que buscábamos.

No hay comentarios:

Publicar un comentario en la entrada