TOP

VBA-Lecția 14.2. Crearea unei funcții personalizate

Cu VBA puteți crea o funcție personalizată (numită User Defined Function) care poate fi utilizată în foile de lucru la fel ca și funcțiile obișnuite. Acest lucru este util atunci când funcțiile Excel existente nu sunt suficiente.

User Defined Function (UDF) este o funcție creată de utilizator care nu există în funcționalitatea standard Excel.

În acest exemplu, vom crea o funcție personalizată IF care poate fi utilizată în calcule pe o foaie de lucru, similar cu alte funcții Excel.


Pentru a afișa valoarea (B2) dacă celula (C2) are valoarea ("YES"), am putea folosi funcția IF în formula =IF(C2="YES",B2,0):

Scopul nostru în acest caz este să creăm o funcție care ar putea face acest lucru =IF(C2 are un fundal verde,B2,0) și pe care am scrie astfel: =IF_GREEN(C2,B2):

Crearea unei funcții personalizate (UDF)

Să începem să creăm propria noastră funcție UDF:

Function IF_GREEN(paid As Range, amount)
     
End Function

Argumente:

  • paid As Range : celula pe care o vom verifica;
  • amount : valoarea pe care o vom introduce dacă TRUE.
  • În acest caz, dacă verificarea returnează FALSE, valoarea va fi întotdeauna 0, deci nu există niciun motiv pentru a specifica un argument pentru aceasta.

    Pentru a verifica dacă culoarea este corectă, puteți folosi celula care conține culoarea de care aveți nevoie:

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

    Dar pentru a evita dependența de celulă, vom folosi pur și simplu numărul culorii dorite:

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

    Pentru a determina numărul de culoare de fundal al unei celule, selectați celula și rulați această macrocomandă:

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

    Acum, tot ce trebuie să facem este să verificăm culoarea celulei folosind IF:

    Function IF_GREEN(paid As Range, amount)
         
         Application.Volatile
         
         green_color = 5296274 'Verde
        
         If paid.Interior.color = green_color Then 'DACA E ADEVARAT
            IF_GREEN = amount
         Else 'DACA MINCI
            IF_GREEN = 0
         End If
         
    End Function
    

    Acum funcția noastră este gata de utilizare.

    Application.Volatile ne spune că aplicația (Excel) ar trebui să fie sensibilă la modificări (cum este cazul funcției obișnuite IF). Aceasta înseamnă că va recalcula funcția de fiecare dată când valoarea se schimbă. De exemplu, dacă modificați orice valoare din coloana Sumă (sau într-adevăr orice altă celulă), această funcție va fi recalculată și va fi afișată suma actualizată.

    Cu toate acestea, modificarea umplerii celulei nu este evenimentul care declanșează recalcularea. Pentru a forța Excel să recalculeze valorile, puteți selecta orice celulă goală și faceți clic pe Ștergere sau adăugați un buton de reîmprospătare ("Refresh") care va reîmprospăta totul când faceți clic pe el:

    Sub refresh_macro()
         Application.Calculate
    End Sub
    

    În plus

    Mai jos este un mod scurtat de a scrie aceeași funcție:

    Function IF_GREEN(paid As Range, amount)
         Application.Volatile
         IF_GREEN = 0 'DACA MINCI
         If paid.Interior.color = 5296274 Then IF_GREEN = amount 'DACA E ADEVARAT
    End Function
    

    Puteți descărca fișierul Excel care conține acest exemplu făcând clic aici: 🢃