Funcţii Excel definite de utilizator (FDU) în VBA

Download Report

Transcript Funcţii Excel definite de utilizator (FDU) în VBA

Funcţii Excel definite de utilizator (FDU) în VBA
 Funcţiile definite de utilizator (UDF – User Defined Function)
în Excel reprezintă o alternativă personalizată la funcţiile proprii.
 FDU pot reduce substanţial încărcarea unei foi de calcul. Prin
FDU este posibil a se reduce un calcul care necesită numeroase
celule pentru rezultate intermediare, la un singur apel de funcţie,
efectuat dintr-o singură celulă.
 FDU pot creşte productivitatea în momentul în care mai mulţi
utilizatori trebuie să repete aceleaşi proceduri de calcul. Astfel,
se poate defini o bibliotecă de funcţii adaptate utilizării într-un
mediu personalizat.
FDU: Creare
 FDU nu pot fi înregistrate ca operaţii manuale (Tools – Macro –
Record New Macro)
 FDU trebuiesc editate (de la zero), utilizând un modul VBE (Tools –
Macro – Visual Basic Editor / Alt+F11).
 Dacă este necesar (dacă nu există în fereastra VBA Project nici un
modul predefinit), se poate insera prin comanda Insert Module
 Principala diferenţă între o procedură VBA de tip sub şi o
procedură de tip funcţie, rezidă în faptul că o FDU returnează o
valoare.
 Astfel , numeFDU() calculează o valoare numerică plecând de la
variabilele sale declarate ca argumente şi transpune acea valoare
într-o celulă în care este editată formula Excel care face apel la
funcţia “numeFDU”.
Funcţii Definite de Utilizator
(funcţii personalizate)
 Funcţiile personalizate vor fi editate utilizând un modul VBA
(Tools – Macro – Visual Basic Editor / Alt+F11).
 Inserarea unui modul predefinit în fereastra VBA Project se
realizează prin comanda Insert Module
Close and Return
to Excel / Alt+F11
 În Excel, funcţia se editează în mod obişnuit, cu argumentele proprii
adrese de celule / nume de câmpuri în loc de variabile.
FDU: Exemple:
 Exemplul 1
Structură If...Then...Else...EndIf
Exemplul 2
Structură If ... ElseIf...EndIf
Exemplul 3
Structură Select Case ... End Select
 Exemplul 4
Structură If cu Vlookup
If...Then...Else...EndIf
If...ElseIf...EndIf
Nr. zile întârziere
If...ElseIf...EndIf
30 zile
90 zile
0,3%
0,5%
180 zile
>180 zile
0,3%
0,5%
0,7%
1%
=IF(OR(J5="DA";TODAY()<H5);0;
IF((TODAY()-H5)<=30;(TODAY()-H5)*I5*0,3%;
IF((TODAY()-H5)<=90;(I5*30*0,3%)+(TODAY()-H5-30)*I5*0,5%;
IF((TODAY()-H5)<=180;(I5*30*0,3%)+(I5*60*0,5%)+(TODAY()-H5-90)*I5*0,7%;
(I5*30*0,3%)+(I5*60*0,5%)+(I5*90*0,7%)+(TODAY()-H5-180)*I5*1%))))
Select Case...End Select
Obiecte VBA de tip funcţii (funcţia Vlookup)
IF (Cantitate>Cantitate_discount;
Dif_cant*Preţ*(1-Reducere)+Cantitate_discount*Preţ;
Cantitate*Preţ)
Modul VBA cu funcţia Vlookup
Modul VBA cu funcţia Vlookup
(Test de existenţă a cheii de consultare)
Modul VBA cu funcţia Vlookup
FDU: Limite în utilizare
 Imposibilitatea de creare a unei funcţii capabile să modifice (sau
să se refere la) structura unei foi de calcul.
 O FDU nu poate să returneze o valoare pentru o altă celulă, nu
poate modifica o caracteristică fizică a unei celule (font, culoare) .
 O FDU nu poate îndeplini acţiuni cum ar fi copierea sau
deplasarea conţinutului celulelor, modificarea poziţiei cursorului,
etc.
 O FDU poate apela o altă procedură de tip funcţie (Function)
sau subrutină (Sub), dar se supune aceloraşi restricţii structurale.
Funcţiile sau procedurile care nu sunt legate de celulele foii de
calcul pot executa orice acţiune Excel, numai dacă nu sunt
integrate în FDU
 Utilizând numeroase FDU, timpul de recalcul pentru formulele
existente scade.