domingo, 1 de abril de 2012

Controles de Formulario sobre la hoja de cálculo


Hoy traigo una nota que hace tiempo me estaba dando vueltas en la cabeza, esto porque me parece que los controles de formulario le dan un aspecto profesional a las plantillas, facilitan ciertas actividades que pueden tornarse repetitivas y además se puede lograr un buen modelo sin necesidad de usar rutinas de macros . 

Lo que se pretende es crear un formulario de consulta que permita calcular el precio de un producto; en este caso: un libro..


Como se ve en la imagen, vamos a trabajar con los controles: lista desplegable, botón de opción y casilla de verificación; todos ubicados en la pestaña programador, opción insertar (versión 2007 y 2010).


Puede ser necesario activar la pestaña de programador. Para la versión 2007, botón office, opciones de excel, opción "más frecuentes" y damos click en la casilla de verificación : mostrar ficha programador en la cinta de opciones.


Para la versión 2010 presento el enlace al sitio JLD excel.

Ahora, para crear la lista que permitirá seleccionar el libro a comprar, debemos tener una base de datos con los respectivos precios. Esta se tendrá en una hoja contigua a la hoja donde se creara el formulario.


Después, en la hoja "formulario" instalamos la lista desplegable.


Para asignarle el rango que contiene el nombre del libro, vamos a crear un nombre dinámico que permita la actualización automática de la lista cuando se ingrese un nuevo libro.

Ejecutamos el comando Control+F3 y de inmediato se despliega el administrador de nombres, después damos click en la opción nuevo y escribimos "libro".


La formulación que va en el campo "Hace referencia a" es: 

=DESREF(Base_datos!$A$2;0;0;CONTARA(Base_datos!$A:$A);1)

La interpretación de esta formulación es: 

Devuelve el rango que comienza en la celda A2 de la hoja Base_datos y que contiene las celdas no vacías de la columna A.

A continuación, le asignamos este rango al control así:

Click derecho sobre el control, formato de control, tecleamos (no funciona la tecla F3 para llamar el formulario que permite pegar el nombre) el nombre antes creado en el campo rango de entrada, y en el campo vincular con la celda señalamos la celda G1 de la hoja Base_datos (Base_datos!$G$1).

De esta manera lo que se obtiene es:


A continuación se crea un nombre dinámico que permita conocer el precio del libro cada vez que se seleccione un nombre en la lista desplegable. Este es : =DESREF(Base_datos!$B$2;0;0;CONTAR(Base_datos!$B:$B);1).



Notese que se uso la función CONTAR en lugar de la función CONTARA, esto porque la función CONTAR solo funciona con las celdas que contienen números, por lo que aplica para este caso en el que se tiene un rango de precios.

Teniendo el nombre dinámico para los precios solo resta usar la función INDICE en una celda debajo de la lista desplegable, así: =INDICE(precios;Base_datos!G1).

Lo anterior hará que cada vez que se seleccione un título de un libro, aparezca el precio del mismo. La matriz de la función corresponde al rango que hemos denominado "precios" y el número de fila es la celda G1 de la hoja Base_datos que corresponde al campo "vincular con la celda" de la lista desplegable.

El resultado es:


Insertamos una casilla de verificación para determinar si se envía o no por correo el libro. Esta casilla se vincula con la celda I12.


Ahora insertaremos los botones de opción relacionados con el costo de envío. Estos irán dentro de un cuadro de grupo. Para insertar este en los espacios exactos de las celdas hay que oprimir la tecla Alt mientras se inserta.






Después de insertar los botones, con click derecho y sosteniendo la tecla Ctrl; los seleccionamos , damos click derecho, opción formato de control, vincular con la celda H21. Con esto lograremos que todos los controles tengan la misma referencia que en últimas permitirá formular las celdas subsiguientes.




Para calcular el costo del envío, en la celda F29 formulamos: =SI(I12=FALSO;"";ELEGIR($H$20;50000;100000;300000;500000)).

La función ELEGIR se describe a continuación:

La función ELEGIR devuelve un valor elegido de una serie de valores, dado un número índice.









índice: es un número entero encargado de escoger un valor dentro de una serie de valores. Puede ser escrito directamente en la función, una función que devuelva números enteros o referencias a celdas.

valor1, valor2, ....: es la serie de datos de los cuales se elige uno, según lo indicado en índice. Puede ser otra función, una referencia a celdas o valores escritos directamente en la función.

En nuestro caso H21 corresponde al valor índice de la función; es decir, el valor que nos indicara cuál  de los controles hemos elegido y por ejemplo cuando se elija el primer botón, la función devolverá 50000.


Por último, en la celda F31 formularemos: =SI($F$29="";$F$8*1,16;(F8+F29)*1,16). Basicamente calcula el costo total del producto, incluyendo el IVA.





3 comentarios: