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: 🢃