Turinys
Tęsiame vadovėlių ciklą apie vartotojo apibrėžtas funkcijas. Ankstesniuose straipsniuose susipažinome su vartotojo apibrėžtomis funkcijomis ir sužinojome, kaip jas kurti ir naudoti. Šiame vadovėlyje apžvelgsime šių funkcijų naudojimo ypatumus ir pamatysime skirtumus tarp vartotojo apibrėžtų funkcijų ir VBA makrokomandų.
Šioje pamokoje sužinosime šiuos dalykus:
Tikimės, kad šis straipsnis pagilins jūsų žinias apie UDF ir padės jas dar efektyviau naudoti "Excel" sąsiuviniuose.
Ar UDF ir makrokomandos yra tas pats?
Naudojant VBA redaktorių kuriamos ir naudotojo apibrėžtos funkcijos, ir VBA makrokomandos. Kuo jos skiriasi ir kam teikti pirmenybę?
Svarbiausias skirtumas yra tas, kad funkcija atlieka skaičiavimus, o makrokomandos atlieka tam tikrą veiksmą. Vartotojo apibrėžta funkcija, kaip ir įprasta "Excel" funkcija, turi būti įrašyta ląstelėje. Ją įvykdžius, ląstelė grąžina tam tikrą reikšmę. Kartu negalima keisti kitų ląstelių reikšmių, taip pat kai kurių dabartinės ląstelės savybių (pvz,formatavimas). Tačiau sąlyginio formatavimo formulėse galite naudoti pasirinktinę funkciją.
UDF ir VBA makrokomandos veikia skirtingai. Pavyzdžiui, kurdami UDF "Visual Basic" redaktoriuje, pradedate nuo teiginio Funkcija ir užbaigti Funkcijos pabaiga . Įrašydami makrokomandą pradedate nuo teiginio Sub ir užbaigti Pabaiga Sub.
Ne visi "Visual Basic" operatoriai gali būti naudojami UDF kurti. Dėl šios priežasties makrokomandos yra universalesnis sprendimas.
Priešingai nei vartotojo apibrėžta funkcija, makrokomandai nereikia pateikti jokių argumentų (ir ji negali priimti jokių argumentų).
Esmė ta, kad kai kurios makrokomandos gali naudoti ląstelių adresus arba formatavimo elementus (pvz., spalvą). Jei perkelsite ląsteles, pridėsite ar pašalinsite eilutes ir stulpelius, pakeisite ląstelių formatą, galite lengvai "sugadinti" savo makrokomandas. Tai ypač įmanoma, jei dalijatės savo failu su kolegomis, kurie nežino, kaip veikia jūsų makrokomandos.
Pavyzdžiui, turite failą su puikiai veikiančiu makru. Ši formulė apskaičiuoja langelių A1-A4 procentinę dalį. Makro pakeičia šių langelių spalvą į geltoną. Aktyviame langelyje nustatomas procentinis formatas.
Jei jūs arba kas nors kitas nuspręs įterpti naują eilutę, makrokomanda toliau ieškos A4 langelio reikšmės (UDF parametras 4,1), nepavyks ir bus grąžinta klaida:
Šiuo atveju klaida įvyko dėl dalijimo iš nulio (naujai pridėtoje eilutėje nėra reikšmės). Jei makrokomanda atlieka, tarkime, sumavimą, tiesiog gausite neteisingą rezultatą. Tačiau apie tai nesužinosite.
Priešingai nei makrokomandos, naudotojo apibrėžtos funkcijos negali sukelti tokios nemalonios situacijos.
Toliau matote tų pačių skaičiavimų atlikimą naudojant UDF. Čia galite nurodyti įvesties langelius bet kurioje darbalapio vietoje ir nesusidursite su netikėtomis problemomis juos keisdami.
Parašiau šią formulę C3 programoje:
=UDF_vs_Macro(A1,A4)
Tada įterpiau tuščią eilutę ir formulė pasikeitė, kaip matote pirmiau pateiktoje ekrano nuotraukoje.
Dabar įvesties langelį arba langelį su funkcija galime perkelti bet kur. Rezultatas visada bus teisingas.
Papildomas UDF naudojimo privalumas yra tas, kad jos automatiškai atnaujinamos, kai pasikeičia įvesties ląstelės vertė. Naudodami makrokomandas visada turite užtikrinti, kad visi duomenys būtų atnaujinti.
Atsižvelgdamas į šį pavyzdį, norėčiau, jei įmanoma, naudoti UDF, o makrokomandas naudoti tik kitiems su skaičiavimais nesusijusiems veiksmams.
UDF naudojimo apribojimai ir trūkumai
Jau minėjau UDF privalumus. Trumpai tariant, ji gali atlikti skaičiavimus, kurių neįmanoma atlikti naudojant standartines "Excel" funkcijas. Be to, ji gali išsaugoti ir naudoti ilgas ir sudėtingas formules, paversdama jas viena funkcija. Ir jums nereikės vėl ir vėl rašyti sudėtingų formulių.
Dabar išsamiau aptarsime EPF trūkumus:
- Norint sukurti UDF, reikia naudoti VBA. Nėra jokio būdo tai apeiti. Tai reiškia, kad naudotojas negali įrašyti UDF taip pat kaip "Excel" makrokomandos. UDF turite sukurti patys. Tačiau galite nukopijuoti ir įklijuoti anksčiau įrašyto makrokomandos kodo dalis į savo funkciją. Tik turite žinoti pasirinktinių funkcijų apribojimus.
- Kitas UDF trūkumas yra tas, kad, kaip ir bet kuri kita "Excel" funkcija, ji gali grąžinti tik vieną reikšmę arba reikšmių masyvą į ląstelę. Ji tiesiog atlieka skaičiavimus, nieko daugiau.
- Jei norite bendrinti savo darbaknygę su kolegomis, būtinai išsaugokite savo UDF tame pačiame faile. Priešingu atveju jūsų pasirinktinės funkcijos jiems neveiks.
- VBA redaktoriumi sukurtos pasirinktinės funkcijos yra lėtesnės nei įprastos funkcijos. Tai ypač pastebima didelėse lentelėse. Deja, VBA kol kas yra labai lėta programavimo kalba. Todėl, jei turite daug duomenų, stenkitės, kai tik įmanoma, naudoti standartines funkcijas arba kurkite UDF naudodami funkciją LAMBDA.
Pasirinktinės funkcijos apribojimai:
- UDF skirtos atlikti skaičiavimus ir grąžinti vertę. Jų negalima naudoti vietoj makrokomandų.
- Jie negali keisti kitų langelių turinio (tik aktyvaus langelio).
- Funkcijų pavadinimai turi atitikti tam tikras taisykles. Pavyzdžiui, negalite naudoti pavadinimo, kuris sutampa su gimtuoju "Excel" funkcijos pavadinimu arba ląstelės adresu, pavyzdžiui, AB123.
- Jūsų pasirinktinės funkcijos pavadinime negali būti tarpų, tačiau jame gali būti pabraukimo ženklas. Tačiau pageidautina kiekvieno naujo žodžio pradžioje naudoti didžiąsias raides (pvz., GetMaxBetween).
- UDF negali kopijuoti ir įklijuoti ląstelių į kitas darbalapio sritis.
- Jie negali keisti aktyvaus darbalapio.
- UDF negali pakeisti aktyvios ląstelės formatavimo. Jei norite pakeisti ląstelės formatavimą rodydami skirtingas reikšmes, turėtumėte naudoti sąlyginį formatavimą.
- Jie negali atversti papildomų knygų.
- Jų negalima naudoti makrokomandoms paleisti naudojant Application.OnTime.
- Naudojant makro įrašymo programą negalima sukurti naudotojo apibrėžtos funkcijos.
- Funkcijos nėra rodomos Kūrėjas> Makrokomandos dialogas.
- Jūsų funkcijos bus rodomos dialogo lange ( Insert> Funkcija ), o funkcijų sąraše - tik tada, jei jos deklaruojamos kaip Viešoji svetainė (tai numatytasis nustatymas, jei nenurodyta kitaip).
- Visos funkcijos, deklaruotos kaip Privatus nebus rodomas funkcijų sąraše.
Gana lėtas veikimas ir tam tikri naudojimo apribojimai gali priversti jus susimąstyti: "Kam reikalingos šios pasirinktinės funkcijos?"
Jos gali praversti ir praverčia, jei nepamirštame joms taikomų apribojimų. Jei išmoksite tinkamai kurti ir naudoti UDF, galėsite parašyti savo funkcijų biblioteką. Tai labai praplės jūsų galimybes dirbti su duomenimis "Excel" programoje.
Man pasirinktinės funkcijos labai taupo laiką. O kaip jūs? Ar jau bandėte sukurti savo UDF? Ar jums patiko labiau nei pagrindinės "Excel" funkcijos? Aptarkime tai komentaruose :)