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):
Empecemos a crear nuestra propia función UDF:
Function IF_GREEN(paid As Range, amount) End Function
Argumentos:
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.
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
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í.