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.
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
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".
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.