TOP

VBA-Lezione 14.2. Creazione di una funzione personalizzata

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

Creazione di una funzione personalizzata (UDF)

Iniziamo a creare la nostra funzione UDF:

Function IF_GREEN(paid As Range, amount)
     
End Function

Argomenti:

  • paid As Range : la cella che controlleremo;
  • amount: il valore che inseriremo se TRUE.
  • 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.

    Application.Volatile ci dice che l'applicazione (Excel) dovrebbe essere sensibile ai cambiamenti (come nel caso della normale funzione IF). Ciò significa che ricalcolerà la funzione ogni volta che il valore cambia. Ad esempio, se modifichi qualsiasi valore nella colonna Importo (o in qualsiasi altra cella), questa funzione verrà ricalcolata e verrà visualizzato l'importo aggiornato.

    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
    

    Inoltre

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