Curso Excel VBA y Macros – Cap. 31 – Creando Funciones y UDF para usar en fórmulas

<<CURSO COMPLETO EN YOUTUBE>>

En este tutorial veremos cómo desarrollar funciones en VBA desde cero, tanto para usarse en procedimientos como en celdas de Excel. Cuando desarrollamos funciones que serán usadas en celdas, se les llama UDF o Funciones Definidas por el usuario (User Defined Functions).

Veremos la diferencia entre Procedimientos Sub y Procedimientos de tipo Función. En el capítulo anterior vimos cómo pasar argumentos (ByVal y ByRef) a un procedimiento, haciendo que funcionen similar a las funciones, solo que las funciones se usan para devolver valores únicos o de matriz.

Ver video Capítulo 31 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Qué son las funciones

En VBA una función es un procedimiento que realiza cálculos y devuelve un valor. Las funciones pueden usarse en Procedimientos Sub (macros) o mandarlas llamar desde una celda, siempre y cuando la función no sea privada.

Diferencia entre Procedimientos Sub y Procedimientos de Función

Procedimientos Sub

  • Pueden ser considerados macros.
  • Pueden ser llamados desde otro procedimiento o desde un botón.
  • Se pueden ejecutar con una combinación de celdas.
  • Pueden recibir argumentos.

Funciones

  • Pueden ser llamadas desde otros procedimientos.
  • Devuelven valores únicos o matrices.
  • Pueden llamar desde Formulario y devolver el resultado en un control de TextBox.
  • Se pueden invocar desde celdas de una hoja, de la misma manera que llamamos a las funciones predefinidas en Excel, como SUMA, CONTAR.SI, BUSCARV, etc.
  • Pueden usarse en una fórmula usada en Formato condicional.

Funciones personalizadas UDF (User Defined Function)

Una función personalizada, puede ser pública o privada. Si es pública la podemos invocar desde una celda en Excel, pero si es privada, solo podrá ser llamada desde procedimientos.

Estas funciones las podremos encontrar en el cuadro de diálogo Insertar función, en la categoría Definidas por el usuario y podremos tener una interfaz gráfica para insertar los argumentos.

Cuando ingresamos el sigo de igual “=” en una celda, vamos a poder visualizar las UDF, siempre y cuando el archivo o add-in que las contenga esté abierto. Excel tiene más de 450 funciones, más las que desarrolles.

Una UDF nos permite optimizar cálculos para no repetir código.

Hay que considerar que las UDF son lentas con respecto a las funciones predefinidas en Excel y los archivos que las contengan deben estar habilitados para macros.

Sintaxis de la función

La sintaxis es muy similar a la que tenemos en los Procedimientos SUB

[Public | Private | Friend] [ Static ] Function name [ ( arglist ) ] [ As type ]
[ statements ]
[ name = expression ]
[ Exit Function ]
[ statements ]
[ name = expression ]
End Function

ELEMENTO

DESCRIPCIÓN

Public

Indica que la función es pública. Disponible para todos los procedimientos y hojas de Excel del mismo archivo.

Private

Indica que la función es privada. Solo está disponible en el módulo en el que es declarada.

Friend

Usado en módulos de clase. Indica que el procedimiento de tipo Función es disponible a través del proyecto.

Static

Indica que los valores de la variables locales declaradas en el procedimiento de tipo Función se conservan entre llamadas de procedimientos.

name

Nombre de la función, respetando las reglas de nombres.

arglist

Lista de parámetros que serán enviados como argumentos en la llamada a la función.

type

Tipo de dato devuelto por la Funcion; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no es compatible actualmente), Date, String (excepto la longitud fija), Object, Variant o cualquier tipo definido por el usuario.

statements

Instrucciones que se ejecutarán para realizar los cálculos.

expresión

Devuelve el valor de la función.

Sintaxis de los argumentos de la función

[ Opcional ] [ ByVal | ByRef ] [ ParamArray ] varname [()] [ As type ] [ = DefaultValue ]

Donde:

ELEMENTO

DESCRICIÓN

Optional

Indica que el argumento a pasar es opcional.

ByVal

El argumento se pasa por valor. El procedimiento accede a una copia de la variable por lo que el valor de la variable se mantiene intacto.

ByRef

Es la manera predeterminada en la que se envían los argumentos. Indica que el argumento se pasa por referencia. El procedimiento puede acceder al valor de la variable y lo puede modificar.

ParamArray

Se usa para enviar una matriz de valores.

As type

Indica el tipo de valor que tendrá el parámetro.

varname

Nombre del argumento.

defaultvalue

Cualquier valor o constante. Es válido solo para argumentos opcionales.

Código VBA de las funciones

La siguiente función se llama SumaDos y tiene dos parámetros numero1 y numer2. El valor devuelto por la función será la suma de ambos valores.

Function SumaDos(numero1 As Integer, numero2 As Integer)

SumaDos = numero1 + numero2

End Function

Si usamos la función en celda ingresamos

=SumaDos(A1,A2)

La siguiente macro invocará a la función SumaDos.

Sub Macro()

Dim num1 As Integer
Dim num2 As Integer

num1 = 10
num2 = 20

MsgBox SumaDos(num1, num2)

End Sub

Ahora, la siguiente función se llama ExtraeNumero y nos ayudará a devolver los números que se encuentran en una cadena de texto o en una celda.

Function ExtraeNumeros(Texto As Variant)

Dim Largo As Integer
Dim i As Integer
Dim Valor As String
Dim Valor1 As String

Application.Volatile

Largo = VBA.Len(Texto)

For i = 1 To Largo
    Valor = VBA.Mid(Texto, i, 1)
    If VBA.Asc(Valor) >= 48 And VBA.Asc(Valor) <= 57 Then
        Valor1 = Valor1 & Valor
    Else
    'Nada
    End If
Next i

ExtraeNumeros = Valor1

End Function

En la siguiente macro mandamos llamar la función ExtraeNumero.

Sub LlamarFuncion()

MsgBox ExtraeNumeros("ABC1523DEF34")

End Sub

Si mandamos llamar la función en una celda usamos:

=ExtraeNumeros(A1)

Recomendado:

Aprendamos UDF’s en Excel

Descarga el archivo de ejemplo

031 – Funciones y UDF.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

También te podría gustar...