miércoles, 24 de abril de 2013

Validación de Caracteres No Númericos

Descargar Archivo

"Tengo una tabla en la que en uno de los campos debo introducir códigos de referencia de productos y necesito que excel compruebe que en dichas entradas no se introduce ningún carácter numérico, es decir, que sólo se pueden introducir caracteres alfabéticos (en mayúsculas o minúsculas indistintamente)".

Para solucionar este problema tendremos que comprobar cada una de las entradas carácter por carácter. Esto es debido a que excel diferencia entre entradas numéricas y no numéricas. Si escribimos un número, excel dispone de funciones y herramientas para comprobar si lo escrito es un número o no pero no ocurre lo mismo si la entrada es alfanumérica, es decir, si la entrada está compuesta por caracteres alfabéticos y caracteres numéricos. En este caso  excel considera la entrada como texto a todos los efectos. Partimos el siguiente ejemplo:

 Buscamos que excel permita entradas como las mostradas en B3 y B4 (indistintamente mayúsculas o minúsculas y con un largo entre 1 y 10 caracteres en este ejemplo) y que no permita entradas como B5 (alfanuméricas):


Para ello necesitamos "desmenuzar" carácter por carácter cada entrada. Primero vamos a realizar una lista con el número de caracteres de B3 para lo que debemos escribir las siguientes fórmulas:
copiamos la fórmula de E3 hasta M3. Finalmente copiamos el rango D3:M3 hasta D10:M10.
La primera fórmula comprueba si hay algo escrito en B3, en cuyo caso devuelve el primer valor de nuestra lista, esto es, 1. En caso de que no haya nada devuelve el texto X.
La fórmula de E3 comprueba si la celda anterior (D3) es menor que el largo total (número de caracteres) de la entrada de B3. En tal caso le suma 1 a la entrada anterior, por lo que devuelve 2 para seguir completando nuestra lista. En F3 y siguientes la fórmula comprueba lo mismo hasta que el número que aparezca supere al largo de la entrada, en cuyo caso devolverá una X:


Una vez generada una lista con el número de caracteres de cada entrada, pasamos a comprobar si cada uno de dichos caracteres es una letra o no. Para ello nos situamos en la celda N3 y escribimos la siguiente fórmula:

=--NO(ESERROR(1*(EXTRAE($B3;D3;1)))) y copiamos hasta W3 y posteriormente hasta W10 para finalizar la matriz.

Veamos como funciona esta fórmula:
La función EXTRAE nos permite extraer del texto de B3 un número de caracteres a partir de una posición inicial. El primer argumento de la función es B3 para indicarle en qué celda está el texto que nos interesa. El segundo argumento es el que hace referencia a la posición inicial, es decir, el número de carácter del texto de B3 desde el que debe de empezar la extracción. En nuestro caso ponemos D3 para que cuando copiemos hacia la derecha vaya cambiando a E3, F3, G3, etc. El último argumento indica el número de caracteres a extraer y que en nuestro caso es siempre 1. Con esta parte de la fórmula hemos conseguido desmenuzar carácter por carácter la entrada de B3.
A continuación lo multiplico por 1 para convertirlo en valor (de hecho podría utilizar también la función VALOR). Si se trata de un carácter numérico se convertirá en valor y en el caso contrario (si es una letra) me devolverá un error.
Ahora nos interesa comprobar si NO es un error, para lo que anido la función ESERROR dentro de la función NO. Aquellas entradas que no devuelvan un error me devolverán un valor VERDADERO y las que devuelvan un error mostrarán FALSO. Colocando un doble menos -- delante de la función convertimos estos valores VERDADERO y FALSO en 1 y 0 (lo podemos hacer también con la función N, como hemos visto en otros ejemplos).
En resumen, en el rango N3:W3 obtendremos un cero para aquellos caracteres de la entrada de B3 que sean alfabéticos y un 1 para aquellos que sean numéricos:


Ya sólo nos queda aplicar la Validación de datos. Para ello seleccionamos el rango B3:B10. Abrimos la herramienta de validación y  marcamos Criterio de validación Personalizada. En Fórmula escribimos: =SUMA (N3:W3)=0


De esta manera sólo permitirá introducir entradas cuya suma de cada carácter sea cero, es decir, aquellas que se compongan exclusivamente de caracteres alfabéticos: