Змест
Мы працягваем серыю падручнікаў па функцыях, якія вызначаюцца карыстальнікам. У нашых папярэдніх артыкулах мы пазнаёміліся з карыстальніцкімі функцыямі і навучыліся іх ствараць і выкарыстоўваць. У гэтым дапаможніку мы разгледзім асаблівасці выкарыстання гэтых функцый і ўбачым адрозненні паміж UDF і макрасамі VBA.
У гэтым уроку мы даведаемся наступнае:
Мы спадзяемся, што гэты артыкул пашырыць вашыя веды аб UDF і дапаможа яшчэ больш эфектыўна выкарыстоўваць іх у вашых кнігах Excel.
Ці адно і тое ж UDF і Macro?
Як вызначаныя карыстальнікам функцыі, так і VBA макрасы ствараюцца з дапамогай рэдактара VBA. У чым іх розніца і чаму аддаць перавагу?
Самае галоўнае адрозненне заключаецца ў тым, што функцыя выконвае вылічэнне, а макрас выконвае нейкае дзеянне. Вызначаная карыстальнікам функцыя, як і звычайная функцыя Excel, павінна быць запісана ў ячэйцы. У выніку яго выканання ячэйка вяртае нейкае значэнне. Пры гэтым немагчыма змяніць значэння іншых вочак, а таксама некаторыя ўласцівасці бягучай вочка (у прыватнасці, фарматаванне). Аднак вы можаце выкарыстоўваць карыстальніцкую функцыю ў формулах умоўнага фарматавання.
Макрас UDF і VBA працуюць па-рознаму. Напрыклад, калі вы ствараеце UDF у рэдактары Visual Basic, вы пачынаеце з аператара Function і заканчваеце End Function . Калі вы запісваеце макрас, вы пачынаеце з aаператар Sub і заканчваецца End Sub.
Не ўсе аператары Visual Basic можна выкарыстоўваць для стварэння UDF. Па гэтай прычыне макрас з'яўляецца больш універсальным рашэннем.
Макрас не патрабуе ад карыстальніка перадачы аргументаў (і не можа прымаць аргументы), у адрозненне ад вызначанай карыстальнікам функцыі.
Справа ў тым, што некаторыякаманды макрасаў могуць выкарыстоўваць адрасы вочак або элементы фарматавання (напрыклад, колер). Калі вы перамяшчаеце вочкі, дадаеце або выдаляеце радкі і слупкі, змяняеце фармат вочак, то вы можаце лёгка «зламаць» свае макрасы. Гэта асабліва магчыма, калі вы дзеліцеся сваім файлам з калегамі, якія не ведаюць, як працуюць вашыя макрасы.
Напрыклад, у вас ёсць файл з ідэальна працуючым макрасам. Гэтая формула разлічвае працэнтнае суадносіны вочак A1 да A4. Макрас змяняе колер гэтых вочак на жоўты. Працэнтны фармат задаецца ў актыўнай ячэйцы.
Калі вы ці хтосьці іншы вырашыце ўставіць новы радок, макрас працягне шукаць значэнне ў ячэйцы A4 ( параметр 4,1 у вашым UDF), не атрымліваецца і вяртае памылку:
У гэтым выпадку памылка адбылася з-за дзялення на нуль (няма значэння ў нядаўна дададзеным радок). Калі макрас выконвае, дапусцім, сумаванне, то вы проста атрымаеце няправільны вынік. Але вы пра гэта не даведаецеся.
У адрозненне ад макрасаў, карыстальніцкія функцыі не могуць выклікаць такую непрыемную сітуацыю.
Ніжэй вы бачыце прадукцыйнасцьтыя ж разлікі з выкарыстаннем UDF. Тут вы можаце ўказаць ячэйкі ўводу ў любым месцы аркуша, і вы не сутыкнецеся з нечаканымі праблемамі пры яго змяненні.
Я напісаў наступную формулу ў C3:
=UDF_vs_Macro(A1,A4)
Потым я ўставіў пусты радок, і формула змянілася, як вы бачыце на скрыншоце вышэй.
Цяпер мы можам перамясціць ячэйку ўводу або ячэйку з функцыяй куды заўгодна. Вынік заўсёды будзе правільным.
Дадатковая перавага выкарыстання UDF заключаецца ў тым, што яны аўтаматычна абнаўляюцца пры змене значэння ва ўваходнай ячэйцы. Пры выкарыстанні макрасаў вы заўсёды павінны сачыць за тым, каб усе даныя былі актуальнымі.
Улічваючы гэты прыклад, я б аддаў перавагу выкарыстоўванню UDF усюды, дзе гэта магчыма, і выкарыстоўваў бы макрасы толькі для іншых дзеянняў, не звязаных з разлікамі.
Абмежаванні і недахопы выкарыстання UDF
Я ўжо згадваў перавагі UDF вышэй. Карацей кажучы, ён можа выконваць вылічэнні, якія немагчымыя са стандартнымі функцыямі Excel. Акрамя таго, ён можа захоўваць і выкарыстоўваць доўгія і складаныя формулы, ператвараючы іх у адну функцыю. І вам не трэба будзе зноў і зноў пісаць складаныя формулы.
А цяпер давайце больш падрабязна пагаворым пра недахопы UDF:
- Стварэнне UDF патрабуе выкарыстання VBA. Гэта ніяк не абыйсці. Гэта азначае, што карыстальнік не можа запісваць UDF такім жа чынам, як макрас Excel. Стварыць АДС трэба самому. Аднак вы можаце скапіяваць іустаўце часткі раней запісанага кода макраса ў сваю функцыю. Вам проста трэба ведаць аб абмежаваннях карыстальніцкіх функцый.
- Яшчэ адным недахопам UDF з'яўляецца тое, што, як і любая іншая функцыя Excel, яна можа вяртаць толькі адно значэнне або масіў значэнняў у ячэйку. Ён проста выконвае вылічэнні, не больш за тое.
- Калі вы хочаце падзяліцца сваёй рабочай кнігай з калегамі, не забудзьцеся захаваць вашы UDF ў тым самым файле. У адваротным выпадку вашы карыстальніцкія функцыі не будуць працаваць для іх.
- Карыстальніцкія функцыі, створаныя з дапамогай рэдактара VBA, працуюць павольней, чым звычайныя функцыі. Асабліва гэта прыкметна ў вялікіх сталоў. На жаль, VBA пакуль вельмі павольная мова праграмавання. Таму, калі ў вас шмат даных, старайцеся выкарыстоўваць стандартныя функцыі, калі гэта магчыма, або стварайце UDF з дапамогай функцыі LAMBDA.
Абмежаванні карыстальніцкіх функцый:
- UDF з'яўляюцца прызначаны для выканання вылічэнняў і вяртання значэння. Іх нельга выкарыстоўваць замест макрасаў.
- Яны не могуць змяняць змесціва іншых ячэек (толькі актыўнай ячэйкі).
- Назвы функцый павінны адпавядаць пэўным правілам. Напрыклад, вы не можаце выкарыстоўваць назву, якая адпавядае ўласнай назве функцыі Excel або адрасу ячэйкі, напрыклад AB123.
- Ваша карыстальніцкая функцыя не можа ўтрымліваць прабелы ў назве, але яна можа ўключаць сімвал падкрэслівання. Аднак пераважным спосабам з'яўляецца выкарыстанне вялікіх літар у пачатку кожнага новагаслова (напрыклад, GetMaxBetween).
- UDF не можа капіяваць і ўстаўляць ячэйкі ў іншыя вобласці працоўнага ліста.
- Яны не могуць змяняць актыўны працоўны аркуш.
- UDF могуць' t змяніць фарматаванне ў актыўнай ячэйцы. Калі вы хочаце змяніць фарматаванне ячэйкі пры адлюстраванні розных значэнняў, вы павінны выкарыстоўваць умоўнае фарматаванне.
- Яны не могуць адкрываць дадатковыя кнігі.
- Іх нельга выкарыстоўваць для запуску макрасаў з дапамогай Application.OnTime .
- Функцыя, вызначаная карыстальнікам, не можа быць створана з дапамогай запісу макрасаў.
- Функцыі не з'яўляюцца ў Developer > Дыялогавае акно макрасаў .
- Вашы функцыі з'явяцца ў дыялогавым акне ( Уставіць > Функцыя ) і ў спісе функцый толькі ў тым выпадку, калі яны аб'яўлены як Публічныя (гэта значэнне па змаўчанні, калі не пазначана іншае).
- Любыя функцыі, абвешчаныя як Прыватныя , не будуць адлюстроўвацца ў спісе функцый.
Даволі павольная праца , а таксама некаторыя абмежаванні ў выкарыстанні могуць прымусіць вас задумацца: "Якая карысць ад гэтых карыстальніцкіх функцый?"
Яны могуць быць карыснымі і карыснымі, калі мы памятаем пра абмежаванні, накладзеныя на іх. Калі вы навучыцеся правільна ствараць і выкарыстоўваць UDF, вы зможаце напісаць сваю бібліятэку функцый. Гэта значна пашырыць вашу здольнасць працаваць з дадзенымі ў Excel.
Што да мяне, карыстальніцкія функцыі выдатна эканомяць час. А што з вамі? Вы ўжо спрабавалі стварыць свой АДС? Табе спадабаласялепш, чым асноўныя функцыі Excel? Давайце абмяркуем гэта ў каментарах :)