lunes, 6 de junio de 2016

Funciones Definidas por el Usuario en Excel

Funciones Definidas por el Usuario -UDF (User Defined Functions)

Sabido es que MS Excel nos ofrece una gran cantidad de funciones propias, clasificadas en diferentes categorías como como matemáticas, búsqueda, referencia, lógicas, texto, etc. Sin embargo, en nuestra labor diaria nos vemos obligados a escribir fórmulas propias para cálculos diversos - algunos sencillos, otros poco más complejos.

Las funciones definidas por el usuario (UDF) son funciones escritas en VBA (Visual Basic for Applications) que permiten ampliar las posibilidades de Excel. Estas funciones estarán totalmente customizadas o personalizadas a nuestras necesidades.

Las UDF pueden ser tan simples o complejas como se requiera, a continuacion se muestra un ejemplo:

Public Function tarifaISRMensual(basePago As Double, mes As Integer) As Double 
Dim encontrado As Boolean 
encontrado = False 
For r = 2 To 133 
     If Worksheets("tablas").Cells(r, 1).Value = mes Then 
          If Worksheets("tablas").Cells(r, 2).Value > basePago Then 
               tarifaISRMensual = 
                    Worksheets("tablas").Cells(r - 1, 4).Value 
               encontrado = True 
               Exit For 
          End If 
     End If 
Next 
If Not encontrado Then 
     tarifaISRMensual = 0 
End If 
End Function
 
Como podemos ver, las UDF no se refieren únicamente a simples fórmulas aritméticas, pueden contener estructuras más complicadas como cíclos, condicionales, e inclusive llamadas a otras UDF.

¿Por qué usar UDF?

En primer lugar, la simplificación de cálculos. Muchas veces, para poder obtener un resultado debemos apoyarnos en varias fórmulas involucrando diferentes celdas, y si estos cálculos deben repetirse a lo largo de toda una tabla, la complejidad y desempeño de la hoja, disminuyen, con las UDF el desempeño no disminuye pues los cálculos se desarrollan en un mismo bloque.

En segundo lugar podemos mencionar la seguridad. Varios negocios requieren que sus procesos, fórmulas, parámetros, etc., sean confidenciales, empleando UDF podemos ocultar los cálculos, parámetros y métodos involucrados.

Finalmente, el mantenimiento, es decir, cambios, correcciones, mejoras que deban o puedan hacerse al cálculo. Cuando detectamos algún error de cálculo o alternativa para mejorarlo, el rastreo del error se complica dependiendo del número de celdas involucradas en el cálculo, con las UDF, el cálculo se realiza en un mismo bloque y la detección del fallo o punto de mejora se detecta más fácilmente.

¿Cómo se crea una UDF?


  • [ALT] + [F11] para abrir el editor VBA
  • Elegir "Insertar  -> Módulo"
  • En el área de trabajo podremos escribir nuestras UDF.
Toda UDF tiene la siguiente estructura:

Public Function Nombre_Funcion (Lista_Parametros) As Tipo_Devuelto

     --- Código de la función ---

End Function


Tipo_Devuelto
Determina el tipo de dato que la función va a devolver es decir, el tipo de respuesta que obtendrá el usuario, los principales tipos son:
  • Integer. Números enteros
  • Double. Números reales
  • String. Cualquier combinación de números, letras y signos
  • Boolean. Falso / Verdadero
Lista_Parametros
Se refiere a los datos que requiere la función para realizar los cálculos, la sintáxis para definir dichos parámetros es:

Nombre_Parametro As Tipo_Dato

Donde los valores de Tipo_Dato son similares a los definidos en Tipo_Devuelto. Veamos el siguiente ejemplo:

Public Function VPN (tasaMinimaAceptable as double, Periodo as Integer, flujoNetoEfectivo as double) as Double 
                          VPN = flujoNetoEfectivo / (1+tasaMinimaAceptable)^Periodo 
End Function

Entendamos el código:

  • El código anterior genera una función llamadaVPN (Valor Presente Neto)
  • La función recibe tres parámetros:
    •  tasaMinimaAceptable de tipo "Double"
    • Periodo de tipo "Integer"
    • flujoNetoEfectivo de tipo "Double"
  • La función devuelve al usuario un dato de tipo "Double"
  • La línea VPN = flujoNetoEfectivo / (1+tasaMinimaAceptable)^Periodo indica que a la función VPN se le asigna el resultado de la operación correspondiente y puede "devolverlo".
 Una vez hecho esto, podremos llamar a nuestra función desde la hoja de Excel como a cualquier otra función.

 Importante. Los libros que contengan UDF deberán ser guardados como "Libro de Excel Habilitado para Macros (*xlxm)"


 
Espero esto sea de utilidad para ustedes, les invito a comentar sobre el tema y dejar sus dudas aquí mismo o envíen un mensaje a través del  formulario de contacto.
 
Les deseo una buena semana.