Crear sus propias funciones
Introducción
Excel 2016 propone unas 400 funciones integradas. A pesar de que este número pueda parecer impresionante, a veces no satisface las necesidades del usuario.
Son los casos en que la "lógica de negocio" es difícil, incluso imposible de expresar mediante las funciones integradas. Puede que suceda también que las funciones integradas no abarquen completamente un ámbito o, incluso, que una fórmula sea tan larga que copiarla en muchas celdas aumente considerablemente el tamaño de la hoja Excel.
El entorno Visual Basic for Applications
Activar la interfaz de desarrollo (IDE)
El acceso a la interfaz de desarrollo desde Excel no aparece por defecto. Este acceso solo está disponible si la pestaña Desarrollador está visible.
Para visualizar la pestaña Desarrollador:
Haga clic en la pestaña Archivo.
Haga clic en Opciones.
En el cuadro de diálogo Opciones de Excel, haga clic en Personalizar cinta de opciones.
Marque Desarrollador en la lista de fichas principales.
Haga clic en el botón Aceptar.
Si hace clic en la pestaña Desarrollador, luego en el grupo Código a la izquierda de la cinta, en el botón Visual Basic, activará la interfaz de desarrollo VBA (IDE) que le permitirá redactar funciones personalizadas.
Además de las funciones personalizadas, el IDE también permite redactar procesos de automatización de tratamientos de Excel. A estos procesos se les suele llamar "macros". En este libro no abordamos el tratamiento de macros en Excel 2016. Forma parte de otro libro de Ediciones ENI llamado ”VBA Excel 2016” en la colección Recursos informáticos.
Observe que VBA es una aplicación distinta de Excel: lo podemos comprobar fácilmente en la barra de tareas, en la parte inferior de la pantalla, pulsando el botón de Excel.
Dominar la interfaz de desarrollo (IDE)
La interfaz de desarrollo suele...
La programación en VBA
El lenguaje VBA es el lenguaje de programación Visual Basic 6 (VB6). Por lo tanto, se pueden utilizar todas las posibilidades de ese lenguaje. Si desea profundizar en el tema de la programación, puede consultar la abundante documentación existente de VB6. Además, el IDE de VBA dispone de una ayuda en línea muy bien hecha. Para acceder a esta, haga clic en el botón ? de la barra de herramientas estándar.
El proceso Function
El proceso Function es el único que estudiaremos en este manual. La forma de este proceso es la siguiente:
Function nombre_funcion(Arg1 As tipo1, Arg2 As tipo2,µ...) As tipofunc
-
[instructions]
-
nombre_de_la_función=...
-
-[instructions]
-
nombre_de_la_función=...
-
End Function
Las palabras en negrita son palabras clave en lenguaje VBA.
Entre paréntesis figuran los argumentos de la función.
nombre_funcion es el nombre que usted elige para su función: debe ser explícito, ni muy largo ni muy corto. El nombre debe comenzar por una letra. No puede ser idéntico a una palabra clave VBA como Dim o Function por ejemplo. Para evitar problemas, utilice solamente letras, números y el carácter guión bajo (_).
tipo1, tipo2 y tipofunc son los tipos de valores que se dan como argumentos y que se obtienen como resultado de la función: número entero, número de doble precisión, texto…
Como en Excel, las funciones VBA pueden ir sin argumento. Sin embargo, deben presentarse los paréntesis de la sintaxis.
Entre Function y End Function se escriben las instrucciones de programación, que permiten describir la lógica de tratamiento que debe seguir la función para llegar al resultado. Estas instrucciones constan de:
-
La utilización de variables
-
Las estructuras de pruebas
-
Las estructuras de bucles
Además, se aconseja incluir comentarios en el cuerpo del proceso. Los comentarios no forman parte de las instrucciones....
Redactar funciones personalizadas
Para redactar una función personalizada, debe:
-
Escoger el tipo de función
-
Fijar los argumentos de la función
-
Programar la lógica "de negocio" a la que la función debe responder.
Escoger el tipo de función
Una función personalizada devuelve un resultado. Como para una variable, el resultado de ser del tipo: Integer, Long, Boolean, String, etc.
Function Nombre_Función(............) As tipoResultado
Ejemplos:
Function AcuerdoPréstamo(............) As Boolean
Function TipoInterés(............) As Double
Fijar los argumentos de la función
Los argumentos facultativos
Generalmente, la función tiene uno o varios argumentos. Algunos de estos argumentos pueden ser facultativos. Si ése fuera el caso, el argumento debe ir precedido del calificativo Optional. En el cuerpo de la función, verificamos la presencia del argumento facultativo mediante la función VBA IsMissing(). El interés reside en crear una función con los argumentos suficientes como para que sea lo más general posible. Dicha opción evita la multiplicación de funciones demasiado particulares.
Si uno de los argumentos es Optional, todos los argumentos que le siguen deberán ser del tipo Optional. Un argumento Optional siempre es del tipo Variant salvo si le damos un valor por defecto.
Ejemplo 1:
Function...
Ejemplos de funciones personalizadas
Cálculo del producto vectorial
La función que permite calcular un producto vectorial no existe en Excel. Por lo tanto, aquí se trata de subsanar una laguna.
La función ProductoVectorial que realiza dicho cálculo tiene como argumentos dos rangos de 3 celdas que representan las coordenadas de los vectores V1 y V2 y se obtiene el resultado en un rango de 3 celdas en columna.
Function ProductoVectorialV(V1 As Range, V2 As Range) As Variant
' Declaración de una tabla de 3 líneas x 1 columna
Dim t(1 To 3, 1 To 1) As Variant
' Cálculo de coordenadas del vector resultado de V1ˆV2
t(1, 1) = V1.Celdas(2) * V2.Celdas(3) - V2.Celdas(2) * V1.Celdas(3)
t(2, 1) = V2.Celdas(1) * V1.Celdas(3) - V1.Celdas(1) * V2.Celdas(3)
t(3, 1) = V1.Celdas(1) * V2.Celdas(2) - V2.Celdas(1) * V1.Celdas(2)
ProductoVectorial = t
End Function
Este es un ejemplo de utilización de la función ProductoVectorialV en Excel. Las fórmulas se escriben de forma matricial.
Astronomía: cálculo del Día Juliano
En astronomía, el Día Juliano es una medida de datación de los acontecimientos astronómicos independiente de los calendarios en vigor en diferentes épocas: gregoriano (el más extendido), judío, musulmán, chino, etc. Es un número de días y, en algunos casos, de fracción del día. El año de inicio es el -4712.
El Año Juliano comienza a mediodía en Greenwich, es decir, a las 12h en Tiempo Universal.
El objetivo de la función DJ es calcular el Día Juliano correspondiente a una fecha y a una hora del calendario gregoriano. Este valor se presenta en una celda de la siguiente forma:
(el formato personalizado empleado en B43 es dd/mm/aaaa hh:mm:ss)
El algoritmo de cálculo consta de las siguientes etapas:
-
A, M y D corresponden respectivamente...