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

Oleg Tolochko, publicado el 2025-09-07, 177 visitas
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. 

Insert code to VBE
Function PLUS(number1 As Long, number2 As Long) As Long Dim result As Long result = number1 + number2 PLUS = result End Function

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

Custom function use example

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 Function

Argumentos

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 Function

Si 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 Function

Observe 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 Function

El 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
Written by Oleg Tolochko
Propietario, autor y editor de ITWebMind.com

Desde 2021 trabajo como autónomo, principalmente en el campo de la publicidad, el desarrollo y la promoción de sitios web. Me interesa la programación, en particular Python, PHP y JS, sobre todo para mi propio uso y la automatización de mis proyectos. También me interesan el diseño, el SEO, la publicidad contextual y dirigida, la productividad y diversas áreas de la gestión. Me gusta tocar la guitarra, los caballos y el buceo. Actualmente estoy viajando por Asia. En este blog recopilo mi experiencia laboral para mí y para otros, además de mejorar mis habilidades en diseño, desarrollo y promoción de sitios web y redacción publicitaria.

Por favor, califica este artículo
(5 estrellas / 1 votos)