Access y Excel: encadenar la función condicional.

En la publicación de hoy, voy a detallar todos los pasos necesarios para ver el resultado final de nuestra problemática.

Tened en cuenta que, a partir de aquí, todo lo que está en cursiva negrita y subrayado, es el enlace a la publicación donde se explica todo con mayor detalle.

Nuestra problemática consiste en rellenar de ceros un alta de un operario en el que la cuenta contable de 12 caracteres, está marcada con una entrada que contiene una coma o un punto.

Ante este planteamiento, debemos empezar a conocer ciertas funciones, la primera de ellas es la función 'EsNum'.


Y, cómo no, hay que conocer también los entresijos de la función 'Longitud'.

A partir de ahí, debemos enseñarnos a manejar las condiciones, es decir, la función 'SiInm' para Access o la función 'Si' para Excel.

En nuestra problemática necesitamos, además, entender cómo se encadenan funciones que, sin ser las que nos dan un resultado directo, son imprescindibles para que el resultado sea el buscado.

Por lo tanto, dentro de la función condicional, hemos de encadenar las funciones 'Izq', 'Der', 'Int' y 'Val'.

Como es obvio, si un alta del operario es un número en el que lo que separa la izquierda de la derecha es un punto o una coma, y ya conocemos la posición de estos caracteres, pues primero empezamos por aislar la parte de la izquierda desde el punto o la coma.

Después aislamos la parte de la derecha, rellenando con ceros pero sin completar los doce dígitos.

Y antes de proceder con la solución de las condiciones que nos son necesarias, unimos la parte de la izquierda con la parte de la derecha, obteniendo así la cuenta contable de 12 dígitos.

Pero puede ocurrir que el operario no escriba siempre el punto o la coma en el alta de la información; puede escribir '430,23', como podría escribir por un error simple '430m23', ya que la m está al lado de la coma en el teclado.

¿Qué ocurre entonces? Que si no usamos la función condicional, el resultado será un error y, esto, no debemos permitirlo. Porque los errores no se graban en las tablas y, nosotros debemos tener la precaución siempre, siempre, que grabamos algo lógico, no un error.

Por lo tanto, ahora os detallo cómo quedan las condicionales para cada uno de los valores que tenemos que prevenir.

Suponiendo que el alta del operario es el siguiente tecleado: '43,6599', tendremos, en primer lugar que:

[Cuenta] = "43,6599", y después seguirá todo el razonamiento siguiente, en el que iré sustituyendo títulos por contenidos:


[EsNúmero]: EsNum([Cuenta]), por lo tanto,

[EsNúmero]: EsNum("43,6599"); [EsNúmero] = -1



[PosiciónPunto]: EnCad(1;[Cuenta];".";1), por lo tanto,

[PosiciónPunto]: EnCad(1;"43,6599";".";1); [PosiciónPunto] = 0




[PosiciónComa]: EnCad(1;[Cuenta];",";1), por lo tanto,

[PosiciónComa]: EnCad(1;"43,6599";",";1); [PosiciónComa] = 3



[Longitud]: Longitud([Cuenta]), por lo tanto,

[Longitud]: Longitud("43,6599"); [Longitud] = 7


En estos momentos ya tenemos cual es el contenido de las cuatro primeras variables que hemos creado a partir del alta del operario. ([Cuenta] contiene lo que el operario ha dado de alta, [EsNúmero] contiene si lo dado de alta se puede tratar como un número o no, [PosiciónPunto] contiene la posición del carácter punto, [PosiciónComa] contiene la posición del carácter coma y [Longitud] contiene el número total de caracteres dados de alta por el operario.

Con esos cinco datos, uno dado de alta por el operario y cuatro calculados por nosotros, empezamos a poner las condiciones que nos interesa para obtener el resultado adecuado a nuestra problemática.

Para ello, creamos títulos, (variables), que contengan el resultado de unas ciertas condiciones y, al final, uniremos el resultado de todas las condiciones.

La primera variable es la que nos indicará el resultado si el operario ha pulsado un punto en su teclado total.

Esa variable la llamamos [CuentaPunto]. Contiene las siguientes condiciones: 

[CuentaPunto]: SiInm([EsNúmero]=0;0;SiInm([PosiciónPunto]=0;0;SiInm([PosiciónPunto]>0 Y [PosiciónComa]>0;0;Izq([Cuenta];[PosiciónPunto]-1) & Der(1000000000000+Int(Val(Der([Cuenta];[Longitud]-[PosiciónPunto])));12-([PosiciónPunto]-1))))), por lo tanto,

[CuentaPunto]: SiInm(-1=0;0;SiInm(0=0;0;SiInm(0>0 Y 3>0;0;Izq("43,6599";0-1) & Der(1000000000000+Int(Val(Der("43,6599";7-0)));12-(0-1)))))

Ahora analizamos el resultado de las condiciones de izquierda a derecha, teniendo siempre en cuenta que la contestación al "Sí" es lo que hay a partir del primer punto y coma y que, la contestación al 'No' es lo que hay a partir del segundo punto y coma.

Sería como sigue:

¡Vaya!, estaba tan concentrado que no me había dado cuenta de lo larga que he hecho la publicación de hoy.

Pues nada, repasad lo publicado y, a los que estéis siguiendo toda esta serie de publicaciones, no os perdáis la siguiente publicación, en la que 'continuamos con la siguiente pregunta', ya que la respuesta al diagrama anterior, como podréis ver, es 'No', porque -1 no es igual a 0.

Disfrutad de la semana.

Comentarios