Писање прве Екцел ВБА функције

Преглед садржаја:

Anonim

У овом водичу ћемо научити о Екцел ВБА функцији

1) Шта је Висуал Басиц у Екцелу?

2) Како користити ВБА у Екцелу?

3) Како креирати функцију коју дефинише корисник?

4) Како написати макро?

Како написати ВБА код

Екцел пружа кориснику велику збирку готових функција, више него довољну да задовољи просечног корисника. Много више се може додати инсталирањем различитих доступних додатака. Већина калкулација се може постићи са оним што је понуђено, али неће проћи много времена пре него што зажелите да желите да постоји функција која је обавила одређени посао, а на листи не можете пронаћи ништа прикладно. Треба вам УДФ. УДФ (Усер Дефинед Фунцтион) је једноставно функција коју сами креирате помоћу ВБА. УДФ -ови се често називају „прилагођене функције“. УДФ може остати у кодном модулу прикљученом на радну свеску, у том случају ће увек бити доступан када је та радна свеска отворена. Алтернативно, можете да креирате сопствени додатак који садржи једну или више функција које можете инсталирати у Екцел баш као и комерцијални додатак. УДФ -овима се може приступити и помоћу модула кода. Програмери често стварају УДФ -ове како би радили само у оквиру кода ВБА процедуре и корисник никада није свестан њиховог постојања. Као и свака функција, УДФ може бити једноставан или сложен колико желите. Почнимо са лаким…

Функција за израчунавање површине правоугаоника

Да, знам да то можеш учинити у својој глави! Концепт је врло једноставан па се можете концентрирати на технику. Претпоставимо да вам је потребна функција за израчунавање површине правоугаоника. Прегледате збирку функција програма Екцел, али не постоји ниједна погодна. Ово је прорачун који треба извршити:

ПОДРУЧЈЕ = ДУЖИНА к ШИРИНА

Отворите нову радну свеску, а затим отворите Висуал Басиц Едитор (Алатке> Макро> Висуал Басиц Едитор или АЛТ+Ф11).

Требат ће вам модул у који ћете написати своју функцију па одаберите Уметни> Модул. У празан модул унесите: Подручје функција и притисните ЕНТЕР.Висуал Басиц Едитор довршава линију уместо вас и додаје линију крајње функције као да креирате потпрограм. Засад изгледа овако …

Подручје функција () Крај функције

Поставите курсор између заграда иза "Ареа". Ако сте се икада запитали чему служе заграде, ускоро ћете сазнати! Навешћемо „аргументе“ које ће наша функција узети (ан расправа је податак потребан за израчунавање). Тип Дужина двострука, ширина двострука и кликните на празан ред испод. Имајте на уму да се током куцања појављује оквир за померање који садржи све ствари које одговарају ономе што уносите.

Ова функција се назива Чланови аутоматске листе. Ако се не појави, искључен је (укључите га на Алатке> Опције> Уређивач) или сте можда раније погрешили при куцању. То је веома корисна провера ваше синтаксе. Пронађите ставку која вам је потребна и двапут кликните на њу да бисте је уметнули у свој код. Можете игнорисати и само куцати ако желите. Ваш код сада изгледа овако …

Подручје функција (дужина као двострука, ширина као двострука) Крај функције

Навођење типа података аргумената није обавезно, али има смисла. Могао си да куцаш Ширина Дужина и оставили тако, али упозорење Екцелу који тип података можете очекивати помаже вашем коду да се брже извршава и хвата грешке при уносу. Тхе дупло тип података се односи на број (који може бити веома велики) и дозвољава разломке. Сада о самом прорачуну. У празном реду прво притисните ТАБ кључ за увлачење кода (олакшава читање) и откуцајте Површина = Дужина * Ширина. Ево комплетираног кода …

Подручје функције (дужина као двострука, ширина као двострука) Подручје = дужина * функција завршетка ширине

Приметићете да се још једна од функција помоћи програма Висуал Басиц Едитор појављује док сте куцали, Аутоматске брзе информације

Овде то није релевантно. Његова сврха је да вам помогне у писању функција у ВБА, говорећи вам који су аргументи потребни. Можете одмах тестирати своју функцију. Пређите на прозор Екцел и унесите бројке за дужину и ширину у засебне ћелије. У трећу ћелију унесите своју функцију као да је једна од уграђених. У овом примеру ћелија А1 садржи дужину (17), а ћелија Б1 ширину (6,5). У Ц1 сам откуцао = површина (А1, Б1) а нова функција је израчунала површину (110,5) …

Понекад аргументи функције могу бити опционални. У овом примеру могли бисмо направити Видтх аргумент необавезан. Претпоставимо да је правоугаоник квадрат са једнаком дужином и ширином. Да бисмо уштедели кориснику да унесе два аргумента, могли бисмо му дозволити да унесе само дужину и да функција користи ту вредност два пута (тј. Помножи дужину к дужину). Дакле, функција зна када то може учинити морамо укључити и ИФ Статемент да му помогне да се одлучи. Промените код тако да изгледа овако …

Подручје функције (дужина двострука, опционална ширина као варијанта) Ако недостаје (ширина), тада је површина = дужина * остала дужина = дужина * ширина завршава ако функција завршава

Имајте на уму да је тип података за Видтх промењен у Варијанта да дозволи нулл вредности. Функција сада дозвољава кориснику да унесе само један аргумент, нпр. = површина (А1).Изјава ИФ у функцији проверава да ли је аргумент Видтх достављен и израчунава у складу с тим …

Функција за израчунавање потрошње горива

Волим да проверавам потрошњу горива у аутомобилу, па када купујем гориво, бележим километражу и количину горива која је потребна за пуњење резервоара. Овде се у Великој Британији гориво продаје у литрама. Милометар аутомобила (у реду, дакле, то је бројач километара) бележи растојање у миљама. А пошто сам престар и глуп да бих се мењао, разумем само МПГ (миље по галону). Ако мислите да је све то помало тужно, шта кажете на ово. Кад дођем кући, отворим Екцел и унесем податке у радни лист који за мене израчунава МПГ и приказује перформансе аутомобила. Израчун је број миља које је аутомобил прешао од посљедњег пуњења подијељен с бројем галона потрошеног горива …

МПГ = (МИЛЕ ОВЕ ИСПУЊАВАЊА - МИЛЕС ЛАСТ ФИЛЛ) / ГАЛОНИ ГОРИВА

али зато што гориво долази у литрама, а у галону има 4,554 литара …

МПГ = (МИЛИЈЕ ОВО ПУЊЕЊЕ - МИЛИЈЕ ПОСЛЕДЊЕ ПУЊЕЊЕ) / ЛИТАРИ ГОРИВА к 4,554

Ево како сам написао функцију …

Функција МПГ (СтартМилес Ас Интегер, ФинисхМилес Ас Интегер, Литерс Ас Сингле) МПГ = (ФинисхМилес - СтартМилес) / Литара * 4.546 Крајња функција

а ево како то изгледа на радном листу …

Не обављају све функције математичке прорачуне. Ево једне која пружа информације …

Функција која даје име дана

Често ме питају постоји ли функција датума која дан у недељи даје као текст (нпр. Понедељак). Одговор је не*, али је прилично лако направити га. (*Додатак: Да ли сам рекао не? Проверите доњу напомену да видите функцију коју сам заборавио!). Екцел има функцију ВЕЕКДАИ, која враћа дан у недељи као број од 1 до 7. Морате изабрати који дан је 1 ако вам се не свиђа подразумевана вредност (недеља). У доњем примеру функција враћа „5“ за које знам да значи „четвртак“.

Али не желим да видим број, желим да видим "четвртак". Могао бих изменити прорачун додавањем функције ВЛООКУП која се односила на табелу која негде садржи листу бројева и одговарајућу листу имена дана. Или бих могао имати целу ствар самостално са више угнежђених ИФ израза. Превише компликована! Одговор је прилагођена функција …

Функција ДаиНаме (ИнпутДате Ас Дате) Дим ДаиНумбер Ас Интегер ДаиНумбер = Радни дан (ИнпутДате, вбСундаи) Одабир броја дана у дану Цасе Цасе 1 ДаиНаме = "Сундаи" Цасе 2 ДаиНаме = "Мондаи" Цасе 3 ДаиНаме = "Туесдаи" Цасе 4 ДаиНаме = "Веднесдаи" Случај 5 ДаиНаме = "Четвртак" Случај 6 ДаиНаме = "Петак" Случај 7 ДаиНаме = "Субота" Крај Изаберите функцију завршетка

Назвао сам своју функцију "ДаиНаме" и за њу је потребан један аргумент, који ја називам "ИнпутДате" који (наравно) мора бити датум. Ево како то функционише…

  • Први ред функције декларише променљиву коју сам назвао "ДаиНумбер" која ће бити цео број (тј. Цео број).
  • Следећи ред функције додељује вредност тој променљивој помоћу Екцел -ове функције ВЕЕКДАИ. Вредност ће бити број између 1 и 7. Иако је подразумевано 1 = недеља, ипак сам је укључио ради јасноће.
  • Коначно а Цасе Статемент испитује вредност променљиве и враћа одговарајући део текста.

Ево како то изгледа на радном листу…

Приступ вашим прилагођеним функцијама

Ако радна свеска има прикључени ВБА кодни модул који садржи прилагођене функције, те функције се могу лако адресирати унутар исте радне свеске као што је показано у горе наведеним примерима. Назив функције користите као да је једна од уграђених функција програма Екцел.

Такође можете пронаћи функције наведене у чаробњаку за функције (понекад се назива и алатка за лепљење функција). Помоћу чаробњака уметните функцију на уобичајен начин (Уметни> Функција).

Померите се надоле по листи категорија функција које желите да пронађете Кориснички дефинисано и изаберите га да бисте видели листу доступних УДФ -ова …

Можете видети да кориснички дефинисаним функцијама недостаје било који опис осим бескорисне поруке „Нема помоћи“, али можете додати кратак опис…

Уверите се да сте у радној свесци која садржи функције. Иди на Алатке> Макро> Макрои. Овде нећете видети своје функције, али Екцел зна за њих! У Назив макроа поље на врху дијалога, откуцајте назив функције, а затим кликните на дијалог Опције дугме. Ако је дугме засивљено, или сте погрешно написали назив функције, или сте у погрешној радној свесци, или не постоји! Ово отвара још један дијалог у који можете унети кратак опис функције. Кликните У реду да бисте сачували опис и (ево збуњујућег бита) кликните Поништити, отказати да бисте затворили дијалог Макро. Не заборавите да сачувате радну свеску која садржи функцију. Следећи пут када одете до чаробњака за функције, ваш УДФ ће имати опис …

Као и макрои, кориснички дефинисане функције могу се користити у било којој другој радној свесци све док је радна свеска која их садржи отворена. Међутим, то није добра пракса. Уношење функције у другу радну свеску није једноставно. Морате додати назив радне свеске домаћина у назив функције. Ово није тешко ако се ослањате на чаробњака за функције, али неспретно је ручно писати. Чаробњак за функције приказује пуна имена свих УДФ -ова у другим радним свескама …

Ако отворите радну свеску у којој сте користили функцију у време када је радна свеска која садржи функцију затворена, видећете поруку о грешци у ћелији у којој сте користили функцију. Екцел је заборавио на то! Отворите радну свеску хоста функције, поново израчунајте и поново је све у реду. На срећу, постоји бољи начин.

Ако желите да напишете Кориснички дефинисане функције за употребу у више од једне радне свеске, најбољи начин је да креирате Екцел Додати у. Сазнајте како то учинити у водичу Изградња додатка за Екцел.

Аддендум

Стварно бих требао знати боље! Никад, никад, никад не реци! Рекавши вам да не постоји функција која даје назив дана, сад сам се сетио оне која то може. Погледајте овај пример…

Функција ТЕКСТ враћа вредност ћелије као текст у одређеном формату броја. Дакле, у примеру који сам могао да изаберем = ТЕКСТ (А1, "ддд") да бисте вратили „Чет“, = ТЕКСТ (А1, "мммм") да бисте вратили „септембар“ итд. Помоћ у Екцелу има још неколико примера начина коришћења ове функције.

Ако вам се допадају наши блогови, поделите их са пријатељима на Фацебооку. Такође нас можете пратити на Твиттер -у и Фацебоок -у.
Волели бисмо да чујемо од вас, реците нам како можемо побољшати, допунити или иновирати наш рад и учинити га бољим за вас. Пишите нам на сајт е -поште