miércoles, 4 de noviembre de 2009

Función definida por el usuario: el SI con VBA.

Todos hemos aplicado en algún momento una función condicional SI, pero de igual forma, en ocasiones el empleo de esta función estándar se hace tediosa e incluso imposible, ya que recordemos que existe una limitación en la anidación de hasta siete.
Cuando estamos hablando de listas cerradas, i.e., cuando tenemos una tabla donde en función a un valor elegiremos un resultado, a veces, conviene definir un procedimiento de 'Function' en el editor de VBA; ya hemos visto algún ejemplo sobre cómo definir una Función personalizada por el usuario.
En España existe una Tabla de datos para determinar el cálculo de las Retenciones sobre los rendimientos del trabajo, que sin entrar en todos los pasos anteriores para definir cuál es la Base de cálculo, sería para el 2009 la siguiente tabla:


Se podría realizar el cálculo directamente empleando una función SI anidada:
=SI(Y(Base>=0;Base<17707,2);(B3+(Base-A3)*D3);SI(Y(Base>=17707,2;Base<33007,2);(B4+(Base-A4)*D4);SI(Y(Base>=33007,2;Base<53407,2);(B5+(Base-A5)*D5);SI(Y(Base>=53407,2);(B6+(Base-A6)*D6)))))


haz click en la imagen


Como vemos la difícil interpretación y escritura de la función recomienda otro método. Usaremos el Editor de Visual Basic (Alt+F11) para definir una Función. Para facilitar la estructura de programación que desarrollaremos a continuación, definiremos los distintos valores de la tabla como constantes, es decir, tanto el 'tipo aplicable' como la 'cuota de retención' serán constantes, por otro lado además los intervalos quedarán fijos. En la programación en VBA de la Función 'RetenciónIRPF' emplearemos SELECT CASE:


haz click en la imagen


Observamos el resultado:


Sin duda es más sencillo estructurar la función empleando Visual Basic.
Como siempre se admiten mejoras al desarrollo.

3 comentarios:

  1. como puedo guardar funciones creadas por usuario explicame detalldalente

    ResponderEliminar
  2. no las puedo guardar atte edwin eled_virtual@hotmail.com

    ResponderEliminar
  3. Hola Edwin,
    entiendo que tu problema surge al trabajar con Excel 2007; ya que al generar una función personalizada, Excel la entiende como una macro, y por tanto, para guardarla habrá que Guardar como Libro de excel habilitado para macros (*.xlsm)
    Coméntame si es ese el problema
    Slds

    ResponderEliminar