Cómo crear funciones en Excel con VBA

Lo primero es explicar en qué consiste una función y en qué se diferencia de un procedimiento o macro.

Una función es un proceso que ejecuta un código programado y devuelve un valor. La diferencia fundamental entre una función y una macro es que la primera requiere una o varias variables de entrada para realizar una serie de operaciones con ellas y después devolver un resultado. Una macro sin embargo, no requiere una variable de entrada, y puede realizar multitud de procesos (ej. Crear una hoja nueva en el documento) sin necesidad de devolver un resultado.

Todas las fórmulas de excel siguen un método similar al que vamos a explicar ahora.

¿Cuándo tengo que crear funciones en Excel?

Excel ya viene programado con más de 400 funciones como SUMA, MEDIA o SI con las cuales ya estaréis familiarizados probablemente. Puede interesarte crear tu propia función de excel cuando realizas la misma operación (relativamente compleja) multitud de veces o para simplificar operaciones complicadas sustituyendo parte de fórmulas por una única función.

Pero todo se entiende mejor con ejemplos así que a continuación tienes 5 maneras de crear una función en Excel.

Ejemplo 1 – Calculo del área de un rectángulo

  • Primero abrimos el Editor de Visual Basic (VBE) e insertamos un módulo.
  • Una vez creado el módulo en editor de código escribimos Function y el nombre que le queremos dar a nuestra función.
  • A continuación entre paréntesis escribimos el nombre de las variables que tomará esta función y definimos que tipo de variables son (ej. x as double).
  • Por último cerramos el paréntesis y definimos el tipo de variable de la función, es decir, el tipo de variable del resultado.
Function AREA(base As Double, altura As Double) As Double
    AREA = base * altura
End Function

A partir de este momento la función queda grabada en este documento (esta función NO será visible en otros documentos de Excel) y se utiliza de la misma manera que el resto de funciones ya existentes.

Esta función también puede utilizar como variables de entrada referencias a otras celdas en el documento:

Esta es una de las fórmulas más básicas que puedes hacer con excel.

Ejemplo 2 – Obtener el apellido de una lista de nombres

Con este ejemplo quiero mostrar que una función también puede tomar como variable de entrada caracteres de texto y no únicamente valores numéricos.

En el ejemplo siguiente tenemos una lista de nombres de los que queremos obtener exclusivamente el apellido:

Function APELLIDO(x As String) As String
    APELLIDO = Right(x, Len(x) - InStr(x, " "))
End Function

Nota:

  • La función “Right(texto, número de caracteres)” te devuelve el número de caracteres indicados contando desde el final del texto hacia el principio.
  • La función “InStr(texto, carácter)” te devuelve la posición en el texto del caracter indicado. En caso de existir el caracter varias veces en el texto te devuelve la primera posición.
  • La función “Len(texto)” te devuelve el número de caracteres que componen el texto.

Este ejemplo de funciones de excel te resultará muy sencillo pero es perfecto para ir introduciéndose en el mundo de las funciones.

Ejemplo 3 – Calculo del rango de una serie de números

El siguiente ejemplo es un cálculo sencillo para obtener el rango de una serie de valores. Con este ejemplo se trata de mostrar cómo se pueden crear funciones que trabajen con rangos.

Function RANGO(x As Range) As Double
    Dim maximo As Double
    Dim minimo As Double
    maximo = Application.WorksheetFunction.Max(x)
    minimo = Application.WorksheetFunction.Min(x)
    RANGO = maximo - minimo
End Function

Ejemplo 4 – Cálculo de los divisores de un número natural

El siguiente ejemplo de función calcula los divisores de un número entero. En este caso la función toma como variable de entrada un número natural (variable tipo Integer) y da como resultado los divisores de dicho número separados por una coma (variable tipo String).

Function DIVISORES(x As Integer) As String
    Dim i As Integer
    i = 2
    DIVISORES = "1"
    Do Until x / i = 1
        If x Mod i = 0 Then
            DIVISORES = DIVISORES & "," & i
            x = x / i
            GoTo siguiente
        End If
        i = i + 1
        siguiente:
    Loop
    DIVISORES = DIVISORES & "," & i
End Function

Nota:

  • La función “x mod y” devuelve el resto de la división de x entre y. Esta función es útil para saber si un número es par (x mod 2 = 0).
  • “GoTo siguiente” genera un salto en el código hasta la línea “siguiente:”. El código entre medias no es ejecutado.
  • “Do Until” es un tipo de bucle que se repite hasta que una condición especificada se cumple. El opuesto a este tipo de bucle seria el Do While en cuyo caso se repite el código siempre que la condición se cumpla.

Es muy importante saber cómo escribir formulas en excel de forma clara y sencilla para que se entiendan bien.

Ejemplo 5– Calculo de área con variable de entrada opcional

Al igual que en muchas funciones ya programadas hay variables de entrada que pueden ser opcionales.

Como se puede ver en la imagen superior la variable “núm_de_caracteres” aparece entre corchetes, lo cual quiere decir que es opcional.

Ejemplo: La función “Izquierda(texto, número de caracteres)” devuelve el número de caracteres especificados contando desde la izquierda de un texto. Como acabamos de explicar, la variable de entrada “numero de caracteres” es opcional, y en caso de no especificar un valor Excel automáticamente le asigna como valor 1.

Nosotros al crear funciones en Excel también podemos definir variables opcionales. En el ejemplo a continuación vamos a crear una función que calcule el área de un rectángulo, pero en caso de que solo tengamos un valor de entrada, asumiremos que se trata de un cuadrado.

Function AREA(base As Double, Optional altura As Variant) As Double
    If IsMissing(altura) Then
        AREA = base * base
    Else
        AREA = base * altura
    End If
End Function

Importante: La función “IsMissing(variable)” funciona únicamente con variables del tipo Variant. Con lo cual la variable opcional deberá ser definida como variable del tipo Variant.

Bonus track: Descarga estos ejemplos

(Visited 17.446 times, 1 visits today)

Me llamo Ignacio Laquidain y estudié Ingeniería de Caminos en la Universidad Politécnica de Madrid. En la actualidad resido y trabajo en California.
La razón por la que aprendí Excel y VBA (y sigo aprendiendo) fue para evitar hacer trabajos rutinarios y rehacer cálculos de manera innecesaria. Pienso que cualquier trabajo repetitivo, por muy complicado que sea, es capaz de programarse.
Mucho de lo que he aprendido ha sido gracias a gente que desinteresadamente responde dudas en internet, cuelga tutoriales, comparte ejemplos etc. y esta es mi manera de continuar la cadena.

Categorías VBA

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información ACEPTAR

Aviso de cookies