Cómo crear una función personalizada en Excel - crear funciones definidas por el usuario (UDF) utilizando el lenguaje VBA

¿Qué son las funciones personalizadas?
Las funciones personalizadas nos ayudan a ampliar la funcionalidad de los cálculos y las transformaciones de datos en Excel. Se utilizan de la misma manera que las funciones estándar de Excel, pero podemos establecer nosotros mismos la lógica de los cálculos.
Las funciones definidas por el usuario toman valores de los parámetros cuando se invocan, realizan ciertos cálculos con ellos y devuelven el resultado. Estos parámetros pueden ser tanto un referencia de celda como un valor estático, ya sea una cadena o un número.
Las funciones se crean de la misma manera que las macros: en la ventana del editor VBA de Excel. La diferencia es que una macro es un algoritmo de acciones que, por sí mismo, no devuelve ningún resultado y puede manipular una hoja, un libro o archivos, casi como un usuario real.
Las funciones carecen de estas capacidades y solo se utilizan para realizar cálculos o transformaciones de los datos que se les envían.
Puedes utilizarlas:
- en una hoja de Excel;
- como parte de una macro u otra función en el editor VBA;
- como regla de formato condicional.
Las funciones personalizadas son más lentas que las funciones de Excel, por lo que no debes abusar de ellas. Úselas solo cuando las funciones estándar sean insuficientes o cuando tenga que escribir una fórmula que sea demasiado difícil de mantener y comprender.
Cómo crearlas
Intentemos componer una función sencilla de Excel para sumar dos números. Abra el Editor de Visual Basic con el atajo de teclado Alt+F11. A continuación, cree un módulo para el libro haciendo clic en Insertar > Módulo. Pegue el código siguiente en él.

Function PLUS(number1 As Long, number2 As Long) As Long Dim result As Long result = number1 + number2 PLUS = result End FunctionGuarde el libro con el atajo de teclado Ctrl+S. Ahora puede utilizar la función PLUS() en la hoja de cálculo. Para probarla, vuelva a la hoja de cálculo e intente escribir =PLUS(1;2) en una celda.

Sintaxis
Aprendamos en qué consiste la estructura sintáctica del código.
Una función se define con el comando Function, en lugar del comando Sub de una macro.
A continuación viene el nombre. Se puede especificar con números, letras cirílicas o latinas y guiones bajos. No se deben utilizar espacios. Además, el nombre de una función personalizada no debe duplicar el nombre de una función estándar, ya que de lo contrario simplemente no funcionará.
Después del nombre, debe especificar los argumentos. Puede especificar el tipo de datos de los argumentos, pero no es necesario. Los tipos de argumentos se corresponden con los tipos de datos estándar de VBA. Una función puede no tener ningún argumento. Además, los argumentos pueden ser obligatorios u opcionales. Veremos estos ejemplos más adelante.
Después de los argumentos, puede declarar el tipo de datos del valor devuelto por la función.
A continuación viene el código de cálculo: puede declarar variables, realizar operaciones y cálculos con argumentos. Antes del comando final End Function, debe especificar el valor de retorno asignándolo al nombre de la función:
Function NAME() ' calculations NAME = 2 End FunctionArgumentos
Se pueden especificar algunos argumentos, pero es posible que no haya ninguno. Probablemente ya sepa que Excel también tiene funciones estándar sin argumentos, como TODAY() o RAND(). Por ejemplo, podemos obtener el nombre de la hoja activa, lo que no requiere ningún argumento.
Function GETSHEETNAME() GETSHEETNAME = Application.ActiveSheet.Name End FunctionSi tienes argumentos, puedes utilizarlos dentro de la función como variables normales.
Argumentos opcionales
Los argumentos pueden ser opcionales. Esto resulta útil, por ejemplo, si una función debe tener una característica que rara vez se utiliza. Para no tener que perder tiempo escribiendo cada vez el argumento responsable de ello, podemos establecerlo como opcional.
En nuestro ejemplo de suma, añadamos la posibilidad de imprimir las unidades de medida después del número si se proporciona el argumento de unidades.
Function SUMWITHUNIT(number1 As Long, number2 As Long, Optional unit As String) Dim count As Long count = number1 + number2 ' sum If Len(unit) > 0 Then result = count & unit ' If the units of measure are specified, add them Else result = count ' Or else we return just a number End If SUMWITHUNIT = result End FunctionObserve cómo se especifica el argumento opcional: la palabra clave Optional se especifica antes del nombre y se coloca después de los argumentos obligatorios, esto es importante.
Valor predeterminado
El argumento opcional también le permite establecer un valor predeterminado y no especificarlo al llamarlo. Por ejemplo, escribamos una función para calcular el importe con impuestos y establezcamos el impuesto predeterminado en un 20 %:
Function WITHTAX(price As Long, Optional tax As Long = 20) As Long Dim result As Long result = price + price * tax / 100 WITHTAX = result End FunctionEl valor predeterminado se especifica después del tipo de datos del argumento utilizando el símbolo =. Tiene sentido especificar el valor predeterminado solo para los argumentos opcionales, ya que los demás deben escribirse siempre al llamar a la función.
Ejemplos
A continuación se muestran algunas funciones útiles que no están incluidas originalmente en Excel. También se pueden implementar fácilmente con funciones estándar, estas son solo ejemplos. Calcular el porcentaje de un número:
Function PERCENTAGE(num1 As Long, num2 As Long) As Double Dim result As Double result = num1 / num2 * 100 PERCENTAGE = result End Function











