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