Con VBA puoi creare una funzione personalizzata (chiamata User Defined Function) che può essere utilizzata nei fogli di lavoro proprio come le normali funzioni. Ciò è utile quando le funzioni Excel esistenti non sono sufficienti.
User Defined Function (UDF) è una funzione creata dall'utente che non esiste nella funzionalità standard Excel.
In questo esempio creeremo una funzione IF personalizzata che può essere utilizzata nei calcoli su un foglio di lavoro, simile ad altre funzioni Excel.
Per visualizzare il valore di (B2) se la cella (C2) ha il valore ("YES"), potremmo utilizzare la funzione IF nella formula =IF(C2="YES",B2,0):
Il nostro obiettivo in questo caso è creare una funzione che possa fare questo =IF(C2 ha uno sfondo verde,B2,0) e che scriveremo così: =IF_GREEN(C2,B2):
Iniziamo a creare la nostra funzione UDF:
Function IF_GREEN(paid As Range, amount)
End Function
Argomenti:
In questo caso, se il controllo restituisce FALSE, il valore sarà sempre 0, quindi non c'è motivo di specificare un argomento per esso.
Per verificare se il colore è corretto, puoi utilizzare la cella che contiene il colore che ti serve:
Function IF_GREEN(paid As Range, amount)
green_color = Sheets("Sheet1").Range("K1").Interior.color
End Function
Ma per evitare di dipendere dalla cella, utilizzeremo semplicemente il numero del colore desiderato:
Function IF_GREEN(paid As Range, amount)
green_color = 5296274 'Verde
End Function
Per determinare il numero del colore di sfondo di una cella, seleziona la cella ed esegui questa macro:
Sub test_color()
MsgBox ActiveCell.Interior.color
End Sub
Ora, tutto ciò che dobbiamo fare è controllare il colore della cella usando IF:
Function IF_GREEN(paid As Range, amount)
Application.Volatile
green_color = 5296274 'Verde
If paid.Interior.color = green_color Then 'SE È VERO
IF_GREEN = amount
Else 'SE MENTE
IF_GREEN = 0
End If
End Function
Ora la nostra funzione è pronta per l'uso.
Tuttavia, la modifica del riempimento della cella non è l'evento che attiva il ricalcolo. Per forzare Excel a ricalcolare i valori, puoi selezionare qualsiasi cella vuota e fare clic su Elimina oppure aggiungere un pulsante Aggiorna ("Refresh") che aggiornerà tutto quando fai clic su di esso:
Sub refresh_macro()
Application.Calculate
End Sub
Di seguito è riportato un modo abbreviato di scrivere la stessa funzione:
Function IF_GREEN(paid As Range, amount)
Application.Volatile
IF_GREEN = 0 'SE MENTE
If paid.Interior.color = 5296274 Then IF_GREEN = amount 'SE È VERO
End Function
Puoi scaricare il file Excel contenente questo esempio cliccando qui: 🢃