Saltar al contenido principal

Crear funciones personalizadas en Excel

Si bien Excel incluye una multitud de funciones de hoja de cálculo integradas, lo más probable es que no tenga una función para cada tipo de cálculo realizado. Los diseñadores de Excel no podían prever las necesidades de cálculo de cada usuario. En su lugar, Excel le proporciona la capacidad de crear funciones personalizadas, que se explican en este artículo.

¿Busca información sobre cómo crear una función personalizada de JavaScript que pueda ejecutar en Excel para Windows, Excel para Mac o Excel para la Web ? Si es así, vea el artículo Introducción a las funciones personalizadas de Excel.

Las funciones personalizadas, como las macros, usan el lenguaje de programación Visual Basic para aplicaciones (VBA) . Difieren de las macros de dos maneras significativas. En primer lugar, usan procedimientos de función en lugar de procedimientos Sub . Es decir, empiezan con una instrucción function en lugar de una instrucción Sub y end with End Function en lugar de End Sub. En segundo lugar, realizan cálculos en lugar de tomar medidas. Ciertos tipos de instrucciones, como las instrucciones que seleccionan y aplican formato a los rangos, se excluyen de las funciones personalizadas. En este artículo, aprenderá a crear y usar funciones personalizadas. Para crear funciones y macros, se trabaja con el Editor de Visual Basic (VBE), que se abre en una nueva ventana independiente de Excel.

Supongamos que su empresa ofrece un descuento de cantidad del 10% en la venta de un producto, siempre que el pedido sea de más de 100 unidades. En los siguientes párrafos, mostraremos una función para calcular este descuento.

En el ejemplo siguiente se muestra un formulario de pedido en el que se muestra cada elemento, cantidad, precio, descuento (si existe) y el precio total resultante.

Formulario de pedido de ejemplo sin una función personalizada

Para crear una función de descuento personalizada en este libro, siga estos pasos:

  1. Presione Alt + F11 para abrir el editor de Visual Basic (en el equipo Mac, presione FN + Alt + F11) y, a continuación, haga clic en Insertar > módulo. Aparece una ventana de nuevo módulo en el lado derecho del editor de Visual Basic.

  2. Copie y pegue el siguiente código en el nuevo módulo.

    Function DISCOUNT(quantity, price)
       If quantity >=100 Then
         DISCOUNT = quantity * price * 0.1
       Else
         DISCOUNT = 0
       End If
     
     DISCOUNT = Application.Round(Discount, 2)
    End Function
    

Nota: Para que el código sea más legible, puede usar la tecla Tab para aplicar sangría a las líneas. La sangría es solo para su ventaja y es opcional, ya que el código se ejecutará con o sin él. Después de escribir una línea con sangría, el editor de Visual Basic supone que la siguiente línea tendrá la misma sangría. Para desplazarse (es decir, a la izquierda) un carácter de tabulación, presione MAYÚS + TAB.

Ahora ya está listo para usar la nueva función de descuento. Cierre el editor de Visual Basic, seleccione la celda G7 y escriba lo siguiente:

= DESCUENTO (D7, E7)

Excel calcula el descuento del 10% en unidades de 200 a $47,50 por unidad y devuelve $950,00.

En la primera línea de su código de VBA, función descuento (cantidad, precio), indicó que la función de descuento requiere dos argumentos: cantidad y precio. Al llamar a la función en una celda de la hoja de cálculo, debe incluir esos dos argumentos. En la fórmula = descuento (D7, E7), D7 es el argumento de cantidad y E7 es el argumento de precio . Ahora puede copiar la fórmula de descuento a G8: G13 para obtener los resultados que se muestran a continuación.

Vamos a considerar cómo Excel interpreta este procedimiento de función. Al presionar entrar, Excel busca el descuento de nombres en el libro actual y encuentra que se trata de una función personalizada en un módulo de VBA. Los nombres de los argumentos entre paréntesis, la cantidad y el precioson marcadores de posición para los valores en los que se basa el cálculo del descuento.

Ejemplo de formulario de pedido con una función personalizada

La instrucción if en el siguiente bloque de código examina el argumento Quantity y determina si el número de elementos vendidos es mayor que o igual a 100:

If quantity >= 100 Then
 DISCOUNT = quantity * price * 0.1
Else
 DISCOUNT = 0
End If

Si el número de elementos vendidos es mayor o igual que 100, VBA ejecuta la siguiente instrucción, que multiplica el valor de cantidad por el valor de Price y, a continuación, multiplica el resultado por 0,1:

Discount = quantity * price * 0.1

El resultado se almacena como el descuentovariable. Una instrucción de VBA que almacena un valor en una variable se denomina instrucción de asignación , porque evalúa la expresión a la derecha del signo igual y asigna el resultado al nombre de la variable de la izquierda. Dado que la variable Discount tiene el mismo nombre que el procedimiento Function, el valor almacenado en la variable se devuelve a la fórmula de la hoja de cálculo que llamó a la función Discount.

Si cantidad es menor que 100, VBA ejecuta la siguiente instrucción:

Discount = 0

Por último, la siguiente instrucción redondea el valor asignado a la variable Discount a dos posiciones decimales:

Discount = Application.Round(Discount, 2)

VBA no tiene una función ROUND, pero Excel sí. Por lo tanto, para usar ROUND en esta instrucción, se indica a VBA que busque el método Round (función) en el objeto Application (Excel). Para ello, agregue la aplicación Word antes de la palabra round. Use esta sintaxis siempre que necesite obtener acceso a una función de Excel desde un módulo de VBA.

Una función personalizada debe comenzar con una instrucción Function y finalizar con una instrucción End Function. Además del nombre de la función, la instrucción de la función suele especificar uno o varios argumentos. Sin embargo, puede crear una función sin argumentos. Excel incluye varias funciones integradas, RAND y ahora, por ejemplo, que no usan argumentos.

Después de la instrucción Function, un procedimiento de función incluye una o más instrucciones VBA que toman decisiones y realizan cálculos con los argumentos que se pasan a la función. Por último, en algún lugar del procedimiento Function, debe incluir una instrucción que asigne un valor a una variable con el mismo nombre que la función. Este valor se devuelve a la fórmula que llama a la función.

El número de palabras clave de VBA que puede usar en las funciones personalizadas es menor que el número que puede usar en las macros. Las funciones personalizadas no pueden hacer nada más que devolver un valor a una fórmula en una hoja de cálculo o a una expresión que se usa en otra macro o función de VBA. Por ejemplo, las funciones personalizadas no pueden cambiar el tamaño de las ventanas, modificar una fórmula en una celda ni cambiar la fuente, el color o las opciones de trama para el texto de una celda. Si incluye código de "acción" de este tipo en un procedimiento de función, la función devolverá el #VALUE! .

La acción que puede realizar un procedimiento de función (aparte de la realización de cálculos) se muestra en un cuadro de diálogo. Puede usar una instrucción InputBox en una función personalizada como medio para obtener la entrada del usuario que ejecuta la función. Puede usar una instrucción MsgBox como un medio para transmitir información al usuario. También puede usar cuadros de diálogo personalizados, o UserForms, pero eso es un asunto que va más allá del alcance de esta introducción.

Incluso las macros sencillas y las personalizadas pueden resultar difíciles de leer. Puede facilitar la comprensión escribiendo texto explicativo en forma de comentarios. Los comentarios se agregan anteponiendo un apóstrofo al texto explicativo. Por ejemplo, en el ejemplo siguiente se muestra la función DISCOUNT (descuento) con comentarios. Agregar comentarios como estos hace que sea más fácil para usted u otros usuarios mantener su código VBA a medida que pasa el tiempo. Si necesita realizar un cambio en el código en el futuro, tendrá más fácil comprender qué hizo originalmente.

Ejemplo de una función de VBA con comentarios

Un apóstrofo indica a Excel que omita todo a la derecha en la misma línea, de modo que pueda crear comentarios en las líneas o en el lado derecho de las líneas que contengan código de VBA. Puede comenzar un bloque de código relativamente largo con un comentario que explique su propósito general y, a continuación, usar comentarios en línea para documentar instrucciones individuales.

Otra forma de documentar las macros y las funciones personalizadas es darles nombres descriptivos. Por ejemplo, en lugar de denominar las etiquetasde una macro, puede denominarla MonthLabels para describir más concretamente el propósito de la macro. El uso de nombres descriptivos para macros y funciones personalizadas es especialmente útil cuando se crean muchos procedimientos, especialmente si se crean procedimientos que tengan fines similares pero no idénticos.

El modo en que se documentan las macros y las funciones personalizadas es una cuestión de preferencias personales. Lo importante es adoptar algún método de documentación y usarlo de manera coherente.

Para usar una función personalizada, el libro que contiene el módulo en el que ha creado la función debe estar abierto. Si ese libro no está abierto, ¿obtienes una #NAME? Error al intentar usar la función. Si hace referencia a la función en un libro diferente, debe preceder el nombre de la función con el nombre del libro en el que se encuentra la función. Por ejemplo, si crea una función llamada descuento en un libro denominado personal. xlsb y llama a esa función desde otro libro, debe escribir = personal. xlsb! Discount (), no solo = Discount ().

Puede ahorrarse algunas pulsaciones de teclas (y posibles errores tipográficos) seleccionando las funciones personalizadas en el cuadro de diálogo Insertar función. Las funciones personalizadas aparecen en la categoría definido por el usuario:

cuadro de diálogo insertar función

Una manera más fácil de hacer que las funciones personalizadas estén disponibles en todo momento es almacenarlas en un libro independiente y, después, guardar ese libro como complemento. Después, puede hacer que el complemento esté disponible siempre que ejecute Excel. A continuación se explica cómo hacer lo siguiente:

  1. Después de crear las funciones que necesita, haga clic en archivo > Guardar como.

    En Excel 2007, haga clic en el botón Microsoft Officey haga clic en Guardar como .

  2. En el cuadro de diálogo Guardar como , abra la lista desplegable Guardar como tipo y seleccione complemento de Excel. Guarde el libro con un nombre que se pueda reconocer, como, por ejemplo, myFunction, en la carpeta AddIns . El cuadro de diálogo Guardar como propondrá la carpeta, de modo que todo lo que tiene que hacer es aceptar la ubicación predeterminada.

  3. Una vez que haya guardado el libro, haga clic en archivo > Opciones de Excel.

    En Excel 2007, haga clic en el botón Microsoft Officey, a continuación, haga clic en Opciones de Excel.

  4. En el cuadro de diálogo Opciones de Excel , haga clic en la categoría complementos.

  5. En la lista desplegable administrar , seleccione complementos de Excel. A continuación, haga clic en el botón ir .

  6. En el cuadro de diálogo complementos, active la casilla que se encuentra junto al nombre que usó para guardar el libro, como se muestra a continuación.

    cuadro de diálogo Complementos

  1. Después de crear las funciones que necesita, haga clic en archivo > Guardar como.

  2. En el cuadro de diálogo Guardar como , abra la lista desplegable Guardar como tipo y seleccione complemento de Excel. Guarde el libro con un nombre que se pueda reconocer, como, por ejemplo, myFunction.

  3. Una vez que haya guardado el libro, haga clic en herramientas > Complementos de Excel.

  4. En el cuadro de diálogo complementos, seleccione el botón Examinar para buscar el complemento, haga clic en abriry active la casilla junto al complemento en el cuadro complementos disponibles .

Después de seguir estos pasos, las funciones personalizadas estarán disponibles cada vez que ejecute Excel. Si desea agregar a la biblioteca de funciones, vuelva al editor de Visual Basic. Si busca en el explorador de proyectos del editor de Visual Basic bajo un encabezado VBAProject, verá un módulo denominado después del archivo de complemento. El complemento tendrá la extensión. XLAM.

módulo con nombre en vbe

Al hacer doble clic en ese módulo en el explorador de proyectos, el editor de Visual Basic mostrará el código de la función. Para agregar una nueva función, coloque el punto de inserción después de la instrucción End Function que finaliza la última función de la ventana código y empiece a escribir. Puede crear tantas funciones como necesite de esta manera, y siempre estarán disponibles en la categoría definida por el usuario en el cuadro de diálogo Insertar función .

Este contenido fue creado originalmente por Mark sobreexponer y Craig Stinson como parte de su libro Microsoft Office Excel 2007 Inside Out. Desde entonces se ha actualizado para que se aplique a las versiones más recientes de Excel.

¿Necesitas más ayuda?

Siempre puede preguntar a un experto en Excel Tech Community, obtener soporte técnico en la Comunidad de respuestas o sugerir una característica nueva o mejora en el UserVoice de Excel.

Nota:  Esta página se ha traducido mediante un sistema automático y es posible que contenga imprecisiones o errores gramaticales. Nuestro objetivo es que este contenido le resulte útil. ¿Podría decirnos si la información le resultó útil? Aquí puede consultar el artículo en inglés.

Ampliar sus conocimientos de Office
Explorar los cursos
Obtener nuevas características primero
Únase a los participantes de Office Insider

¿Le ha sido útil esta información?

¡Gracias por sus comentarios!

Gracias por sus comentarios. Quizá le interese ponerse en contacto con uno de nuestros agentes de soporte de Office.

×