TOP

VBA-Lección 14.2. Creación de una función personalizada

Con VBA puede crear una función personalizada (llamada User Defined Function) que se puede usar en hojas de trabajo como funciones regulares. Esto es útil cuando las funciones Excel existentes no son suficientes.

User Defined Function (UDF) es una función creada por el usuario que no existe en la funcionalidad estándar Excel.

En este ejemplo, crearemos una función IF personalizada que se puede usar en cálculos en una hoja de trabajo, similar a otras funciones Excel.


Para mostrar el valor de (B2) si la celda (C2) tiene el valor ("YES"), podríamos usar la función IF en la fórmula =IF(C2="YES",B2,0):

Nuestro objetivo en este caso es crear una función que pueda hacer esto =IF(C2 tiene un fondo verde,B2,0) y que escribiríamos como: =IF_GREEN(C2,B2):

Creación de una función personalizada (UDF)

Empecemos a crear nuestra propia función UDF:

Function IF_GREEN(paid As Range, amount)
     
End Function

Argumentos:

  • paid As Range : la celda que revisaremos;
  • amount : el valor que insertaremos si TRUE.
  • En este caso, si la comprobación devuelve FALSE, el valor siempre será 0, por lo que no hay razón para especificar un argumento para ello.

    Para verificar si el color es correcto, puede usar la celda que contiene el color que necesita:

    Function IF_GREEN(paid As Range, amount)
    
         green_color = Sheets("Sheet1").Range("K1").Interior.color
    
    End Function
    

    Pero para evitar depender de la celda, simplemente utilizaremos el número del color deseado:

    Function IF_GREEN(paid As Range, amount)
    
         green_color = 5296274 'Verde
    
    End Function
    

    Para determinar el número de color de fondo de una celda, seleccione la celda y ejecute esta macro:

    Sub test_color()
         MsgBox ActiveCell.Interior.color
    End Sub
    

    Ahora, todo lo que tenemos que hacer es verificar el color de la celda usando IF:

    Function IF_GREEN(paid As Range, amount)
         
         Application.Volatile
         
         green_color = 5296274 'Verde
        
         If paid.Interior.color = green_color Then 'SI ES VERDAD
            IF_GREEN = amount
         Else 'SI MIENTE
            IF_GREEN = 0
         End If
         
    End Function
    

    Ahora nuestra función está lista para usar.

    Application.Volatile nos dice que la función es volátil (como es el caso de la función normal IF). Esto significa que se recalculará cada vez que cambie el valor. Por ejemplo, si cambia cualquier valor en la columna Cantidad (o en cualquier otra celda), esta función se volverá a calcular y se mostrará la cantidad actualizada.

    Sin embargo, cambiar el relleno de la celda no es el evento que desencadena el recálculo. Para obligar a Excel a recalcular los valores, puede seleccionar cualquier celda vacía y hacer clic en Eliminar, o agregar un botón Actualizar ("Refresh") que actualizará todo cuando haga clic en él:

    Sub refresh_macro()
         Application.Calculate
    End Sub
    

    Además

    A continuación se muestra una forma abreviada de escribir la misma función:

    Function IF_GREEN(paid As Range, amount)
         Application.Volatile
         IF_GREEN = 0 'SI MIENTE
         If paid.Interior.color = 5296274 Then IF_GREEN = amount 'SI ES VERDAD
    End Function
    

    Puede descargar el archivo Excel que contiene este ejemplo haciendo clic aquí.