Cuprins
Continuăm seria de tutoriale despre funcțiile definite de utilizator. În articolele anterioare, ne-am familiarizat cu funcțiile personalizate și am învățat cum să le creăm și să le folosim. În acest manual vom analiza particularitățile utilizării acestor funcții și vom vedea diferențele dintre UDF și macrourile VBA.
În acest tutorial, vom învăța următoarele:
Sperăm că acest articol vă va spori cunoștințele despre UDF și vă va ajuta să le utilizați și mai eficient în registrele de lucru Excel.
Este UDF și Macro același lucru?
Atât funcțiile definite de utilizator, cât și macro-urile VBA sunt create cu ajutorul editorului VBA. Care este diferența dintre ele și ce trebuie să preferi?
Cea mai importantă diferență este că funcția efectuează calculul, iar macroul efectuează o anumită acțiune. O funcție definită de utilizator, ca și o funcție Excel obișnuită, trebuie scrisă într-o celulă. Ca urmare a executării sale, celula returnează o anumită valoare. În același timp, este imposibil să se modifice valorile altor celule, precum și unele proprietăți ale celulei curente (în special,Cu toate acestea, puteți utiliza o funcție personalizată în formulele de formatare condiționată.
UDF și macro VBA funcționează în moduri diferite. De exemplu, atunci când creați un UDF în editorul Visual Basic, începeți cu o instrucțiune Funcția și se încheie cu un Sfârșitul funcției Când înregistrați o macro, începeți cu o declarație Sub și se încheie cu un End Sub.
Nu toți operatorii Visual Basic pot fi utilizați pentru a crea UDF-uri. Din acest motiv, o macro este o soluție mai versatilă.
Spre deosebire de o funcție definită de utilizator, o macro nu necesită ca utilizatorul să transmită niciun argument (și nici nu poate accepta argumente).
Ideea este că unele comenzi ale macrourilor pot utiliza adrese de celule sau elemente de formatare (de exemplu, culoarea). Dacă mutați celule, adăugați sau eliminați rânduri și coloane, schimbați formatul celulelor, atunci puteți "sparge" cu ușurință macrourile. Acest lucru este posibil mai ales dacă partajați fișierul cu colegi care nu știu cum funcționează macrourile dvs.
De exemplu, aveți un fișier cu o macro care funcționează perfect. Această formulă calculează procentul din celulele A1 până la A4. Macro schimbă culoarea acestor celule în galben. În celula activă este setat un format procentual.
Dacă dvs. sau altcineva decideți să introduceți un nou rând, macroul va continua să caute valoarea din celula A4 (parametrul 4,1 din UDF), va eșua și va returna o eroare:
În acest caz, eroarea s-a produs din cauza împărțirii la zero (nicio valoare într-un rând nou adăugat). În cazul în care macroul efectuează, să spunem, o adunare, atunci veți obține pur și simplu un rezultat greșit. Dar nu veți ști acest lucru.
Spre deosebire de macro-uri, funcțiile definite de utilizator nu pot provoca o astfel de situație neplăcută.
Mai jos vedeți performanța acelorași calcule folosind un UDF. Aici puteți specifica celulele de intrare oriunde în foaia de calcul și nu vă veți confrunta cu probleme neașteptate atunci când le schimbați.
Am scris următoarea formulă în C3:
=UDF_vs_Macro(A1,A4)
Apoi am introdus un rând gol, iar formula s-a schimbat, așa cum puteți vedea în captura de ecran de mai sus.
Acum putem muta oriunde o celulă de intrare sau o celulă cu o funcție. Rezultatul va fi întotdeauna corect.
Un avantaj suplimentar al utilizării UDF-urilor este faptul că acestea se actualizează automat atunci când se modifică valoarea din celula de intrare. Atunci când utilizați macro-uri, trebuie să vă asigurați întotdeauna că toate datele sunt actualizate.
Ținând cont de acest exemplu, aș prefera să folosesc UDF-uri ori de câte ori este posibil și să folosesc macro-uri numai pentru alte activități care nu sunt legate de calcule.
Limitări și dezavantaje ale utilizării UDF
Am menționat deja avantajele UDF mai sus. Pe scurt, poate efectua calcule care nu sunt posibile cu funcțiile standard Excel. În plus, poate salva și utiliza formule lungi și complexe, transformându-le într-o singură funcție. Și nu va trebui să scrieți formule complicate la nesfârșit.
Acum să vorbim mai în detaliu despre deficiențele UDF:
- Crearea UDF necesită utilizarea VBA. Nu există nicio modalitate de a ocoli acest lucru. Acest lucru înseamnă că utilizatorul nu poate înregistra UDF în același mod ca o macro Excel. Trebuie să creați singur UDF. Cu toate acestea, puteți copia și lipi porțiuni din codul macro înregistrat anterior în funcția dvs. Trebuie doar să fiți conștient de limitările funcțiilor personalizate.
- Un alt dezavantaj al UDF este că, la fel ca orice altă funcție Excel, poate returna doar o singură valoare sau o matrice de valori într-o celulă. Pur și simplu efectuează calcule, nimic mai mult.
- Dacă doriți să partajați registrul de lucru cu colegii dvs., asigurați-vă că vă salvați UDF-urile în același fișier. În caz contrar, funcțiile dvs. personalizate nu vor funcționa pentru ei.
- Funcțiile personalizate create cu editorul VBA sunt mai lente decât funcțiile obișnuite. Acest lucru este vizibil mai ales în tabelele mari. Din păcate, VBA este un limbaj de programare foarte lent până în prezent. Prin urmare, dacă aveți multe date, încercați să utilizați funcții standard ori de câte ori este posibil sau creați UDF-uri utilizând funcția LAMBDA.
Limitări ale funcțiilor personalizate:
- UDF-urile sunt concepute pentru a efectua calcule și a returna o valoare. Ele nu pot fi utilizate în locul macrourilor.
- Acestea nu pot modifica conținutul altor celule (doar celula activă).
- Numele funcțiilor trebuie să respecte anumite reguli. De exemplu, nu puteți utiliza un nume care se potrivește cu un nume de funcție Excel nativ sau cu o adresă de celulă, cum ar fi AB123.
- Funcția dvs. personalizată nu poate conține spații în nume, dar poate include caracterul de subliniere. Cu toate acestea, metoda preferată este de a folosi majuscule la începutul fiecărui cuvânt nou (de exemplu, GetMaxBetween).
- Un UDF nu poate copia și lipi celule în alte zone ale foii de calcul.
- Acestea nu pot modifica foaia de lucru activă.
- UDF-urile nu pot modifica formatarea în celula activă. Dacă doriți să modificați formatarea unei celule atunci când afișați valori diferite, trebuie să utilizați formatarea condiționată.
- Aceștia nu pot deschide cărți suplimentare.
- Acestea nu pot fi utilizate pentru a rula macro-uri folosind Application.OnTime.
- O funcție definită de utilizator nu poate fi creată cu ajutorul înregistratorului macro.
- Funcțiile nu apar în Dezvoltator> Macros dialog.
- Funcțiile dvs. vor apărea în caseta de dialog ( Inserare> Funcție ) și în lista de funcții numai dacă sunt declarate ca fiind Public (aceasta este valoarea implicită, cu excepția cazului în care se specifică altfel).
- Orice funcție declarată ca Privat nu va apărea în lista de caracteristici.
O funcționare destul de lentă, precum și unele restricții în utilizare, vă pot face să vă gândiți: "La ce folosesc aceste funcții personalizate?".
Ele pot fi utile și o fac dacă suntem atenți la constrângerile care le sunt impuse. Dacă învățați cum să creați și să utilizați în mod corespunzător UDF-urile, vă puteți scrie biblioteca de funcții. Acest lucru vă va extinde foarte mult capacitatea de a lucra cu datele în Excel.
În ceea ce mă privește, funcțiile personalizate economisesc foarte mult timp. Dar tu? Ai încercat deja să-ți creezi propriul UDF? Ți-a plăcut mai mult decât funcțiile de bază din Excel? Să discutăm în comentarii :)