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):
Să începem să creăm propria noastră funcție UDF:
Function IF_GREEN(paid As Range, amount) End Function
Argumente:
Î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.
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
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: 🢃