Aunque 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 que realice. Los diseñadores de Excel posiblemente no podían anticipar 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.

Las funciones personalizadas, como las macros, usan el Visual Basic para Aplicaciones de programación de 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, comienzan con una instrucción Function en lugar de una instrucción Sub y terminan con La función fin en lugar de Finalizar sub. En segundo lugar, realizan cálculos en lugar de realizar acciones. Determinados tipos de instrucciones, como las instrucciones que seleccionan y formatear rangos, se excluyen de las funciones personalizadas. En este artículo, aprenderá a crear y usar funciones personalizadas. Para crear funciones y macros, trabaje 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 por ciento en la venta de un producto, siempre que el pedido sea para más de 100 unidades. En los párrafos siguientes, mostraremos una función para calcular este descuento.

En el ejemplo siguiente se muestra un formulario de pedido que enumera cada artículo, cantidad, precio, descuento (si lo hay) y el precio ampliado resultante.

Formulario de pedido de ejemplo sin una función personalizada

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

  1. Presione Alt+F11 para abrir el Editor de Visual Basic (en mac, presione FN+ALT+F11)y, a continuación, haga clic en Insertar > módulo. Aparecerá una ventana de módulo nueva 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 beneficio 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 asume que la siguiente línea tendrá una sangría similar. Para desplazarse (es decir, a la izquierda) un carácter de pestaña, presione Mayús+Tab.

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

=DESCUENTO(D7;E7)

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

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

Veamos cómo Excel este procedimiento de función. Al presionar Entrar,Excel busca el nombre DESCUENTO en el libro actual y se da cuenta de que es una función personalizada en un módulo de VBA. Los nombres de argumento entre paréntesis, cantidad y precio sonmarcadores de posición para los valores en los que se basa el cálculo del descuento.

Formulario de pedido de ejemplo con una función personalizada

La instrucción Si del siguiente bloque de código examina el argumento cantidad y determina si el número de elementos vendidos es mayor o igual que 100:

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

Si el número de artículos vendidos es mayor o igual que 100, VBA ejecuta la siguiente instrucción, que multiplica el valor de cantidad por el valor de precio y multiplica el resultado por 0,1:

Discount = quantity * price * 0.1

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

Si la 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 Descuento a dos posiciones decimales:

Discount = Application.Round(Discount, 2)

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

Una función personalizada debe empezar con una instrucción Function y finalizar con una instrucción Función final. Además del nombre de la función, la instrucción Function 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 de VBA que toman decisiones y realizan cálculos con los argumentos pasados a la función. Por último, en algún lugar del procedimiento de función, 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 funciones personalizadas es menor que el número que puede usar en macros. Las funciones personalizadas no pueden hacer nada que no sea devolver un valor a una fórmula de una hoja de cálculo o a una expresión usada en otra macro o función de VBA. Por ejemplo, las funciones personalizadas no pueden cambiar el tamaño de las ventanas, editar una fórmula en una celda o cambiar las opciones de fuente, color o patrón 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 devuelve el #VALUE! .

La única acción que puede realizar un procedimiento de función (aparte de realizar cálculos) es mostrar un cuadro de diálogo. Puede usar una instrucción InputBox en una función personalizada como medio para obtener información del usuario que ejecuta la función. Puede usar una instrucción MsgBox como medio para transmitir información al usuario. También puede usar cuadros de diálogo personalizados o Formularios de usuario,pero ese es un asunto que está más allá del ámbito de esta introducción.

Incluso las macros simples y las funciones personalizadas pueden ser difíciles de leer. Puede hacerlos más fáciles de entender escribiendo texto explicativo en forma de comentarios. Agregue comentarios antes del texto explicativo con un apóstrofo. Por ejemplo, en el ejemplo siguiente se muestra la función DESCUENTO con comentarios. Agregar comentarios como estos hace que sea más fácil para usted u otros usuarios mantener el código de VBA a medida que pasa el tiempo. Si necesita realizar un cambio en el código en el futuro, le será más fácil comprender lo que hizo originalmente.

Ejemplo de una función VBA con comentarios

Un apóstrofo indica a Excel que ignore todo a la derecha en la misma línea, para que pueda crear comentarios en las líneas por sí mismos o en el lado derecho de las líneas que contienen código VBA. Es posible que empiece un bloque de código relativamente largo con un comentario que explique su propósito general y, a continuación, use 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 nombrar una macro Etiquetas,podría nombrarla MonthLabels para describir más específicamente el propósito que sirve la macro. Usar nombres descriptivos para macros y funciones personalizadas es especialmente útil cuando ha creado muchos procedimientos, especialmente si crea procedimientos con fines similares pero no idénticos.

La forma en que documenta las macros y las funciones personalizadas es una cuestión de preferencia personal. Lo importante es adoptar algún método de documentación y usarlo de forma coherente.

Para usar una función personalizada, el libro que contiene el módulo en el que creó la función debe estar abierto. Si ese libro no está abierto, obtiene una #NAME? al intentar usar la función. Si hace referencia a la función de un libro diferente, debe preceder el nombre de la función con el nombre del libro en el que reside la función. Por ejemplo, si crea una función denominada DESCUENTO en un libro llamado Personal.xlsb y llama a esa función desde otro libro, debe escribir =personal.xlsb!discount()y no simplemente =descuento().

Puede guardarse algunas pulsaciones de tecla (y posibles errores de escritura) 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 forma más sencilla 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 un complemento. A continuación, puede hacer que el complemento esté disponible siempre que ejecute Excel. A continuación se explica cómo hacerlo:

  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 Office yhaga clic en Guardar como

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

  3. Después de guardar el libro, haga clic en Archivo > Excel opciones.

    En Excel 2007, haga clic en el botón Microsoft Office yhaga clic en Excel opciones.

  4. En el cuadro de Excel opciones, haga clic en la categoría Complementos.

  5. En la lista desplegable Administrar, seleccione Excel complementos. A continuación, haga clic en el botón Ir.

  6. En el cuadro de diálogo Complementos, active la casilla 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 Excel complemento. Guarde el libro con un nombre reconocible, como MyFunctions.

  3. Después de guardar el libro, haga clic en Herramientas > Excel complementos.

  4. En el cuadro de diálogo Complementos, seleccione el botón Examinar para buscar el complemento, haga clic en Abrir y, a continuación, active la casilla junto a su Add-In 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 Visual Basic funciones. Si busca en el Editor Visual Basic de Project en un encabezado de VBAProject, verá un módulo con el nombre 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 Project, el editor de Visual Basic muestra el código de función. Para agregar una nueva función, coloque el punto de inserción después de la instrucción Función final que termina la última función en 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 Definido por el usuario en el cuadro de diálogo Insertar función.

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

¿Necesitas más ayuda?

Siempre puede preguntar a un experto en la Excel Tech Community u obtener soporte técnico en la Comunidad de respuestas.

¿Necesita más ayuda?

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Unirse a Microsoft Office Usuarios de Insider

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a tu experiencia?

¡Gracias por sus comentarios!

×