Curso Excel VBA y Macros – Cap. 32 – Funciones sin argumentos, con uno o dos
En este tutorial daremos continuidad al tema de Funciones VBA y Funciones personalizadas UDF o User-defined Functions, por sus siglas en inglés.
Veremos algunos ejemplos de funciones sin argumentos, con uno o dos. El ejemplo que contiene dos argumentos, uno de ellos será opcional. En caso de los argumentos opcionales, te mostraré cómo evaluar si el argumento se ingresa o no, usando la función VBA.IsMissing.
Ver video Capítulo 32 Excel VBA & Macros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Funciones VBA
Repasemos algunos temas con respecto a las funciones.
-
Una función es un procedimiento que captará argumentos y devolverá un valor o una matriz de valores.
-
Las funciones pueden llamarse desde procedimientos o desde celdas.
-
Existen funciones sin argumentos como HOY o AHORA.
-
Las funciones públicas son disponibles para todos los procedimientos del archivo y para usarse en celdas.
-
Las funciones privadas solo están disponibles en los procedimientos del mismo módulo.
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.
Función sin argumentos
Te comparto 3 ejemplos de funciones UDF donde no requerimos argumentos para devolver un resultado. En la primera devolvemos el nombre de la hoja activa, en la siguiente la versión de Excel y en la última mostramos el usuario de Excel, el cual puedes encontrar en las Opciones de Excel.
Option Explicit Function NombreHoja() Application.Volatile NombreHoja = ActiveSheet.Name End Function Function Version() Application.Volatile Version = Application.Version End Function Function Usuario() Application.Volatile Usuario = Application.UserName End Function
Función con un argumentos
En esta función valor a tener como argumento el valor de Ventas y dependiendo la cantidad, vamos a devolver un descuento. Usaremos la sentencia If-Then-Else para evaluar las cantidades y MsgBox para mostrar un mensaje bien elaborado.
Option Explicit Function Descuento(Ventas) Application.Volatile If Ventas < 10 Then Descuento = 0 ElseIf Ventas < 20 Then Descuento = 0.1 Else Descuento = 0.2 End If End Function Sub CalcularDescuento() Dim ValorVentas As Integer Dim Mensaje As String ValorVentas = InputBox("Ingrese las ventas", "Ventas") If ValorVentas = 0 Then Exit Sub Mensaje = "Las ventas son: " & vbTab & ValorVentas Mensaje = Mensaje & vbNewLine & "El descuento es: " Mensaje = Mensaje & vbTab & VBA.Format(Descuento(ValorVentas), "0%") MsgBox Mensaje, vbInformation, "EXCELeINFO" End Sub
Función con dos argumentos. Uno opcional
La siguiente función será válida solo para usarse en una celda de Excel. Lograremos que si el usuario ingresa el valor 1, el texto ingresado se convertirá a MAYÚSCULAS, si ingresamos el 2, a minúsculas, y si no se ingresa el parámetro Tipo, se devolverá el texto tal cual. El parámetro Tipo es opcional, por lo que evaluaremos con VBA.IsMissing si el parámetro se ingresa o no.
Option Explicit Function CTexto(Texto As String, Optional Tipo As Variant) If VBA.IsMissing(Tipo) Then Tipo = 0 CTexto = Texto Else Select Case Tipo Case 1 CTexto = VBA.UCase(Texto) Case 2 CTexto = VBA.LCase(Texto) Case Else CTexto = VBA.CVErr(xlErrValue) End Select End If End Function
Descarga el archivo de ejemplo
032 – Funciones sin argumentos, con uno o dos. Opcionales.zip
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.