Най-общо казано макросите представляват автоматизиране на едно или няколко действия при дадено събитие. Могат да се разграничат на два типа макроси:
- Макроси, които могат да бъдат записани – Командни макроси;
- Процедурни макроси – ръчно написани в среда Visual Basic Editor, чрез създаване на процедури и писане на програмен код.
Събитиe в Excel e действие, което може да задейства изпълнението на даден Макрос. Примери за събитие в Excel и VBA е, когато се отвори нова работна книга (workbook) или се вмъкне нов работен лист (worksheet). Друг пример е, когато се кликне на някоя клетка или бутон. Съществуват много събития, на които може да прекачите (напишете) код. Това означава, че щом настъпи дадено събитие и вие сте закачили код към него, то този код ще се изпълни незабавно.
Командни макроси в Excel
Представляват записване на действията ни при работата в Excel и възпроизвеждането му като програмен код. От таба Developer и бутона “Record Macros” задаваме име на макроса и стартираме записването. В този момент Excel следи всяко наше действие върху работния лист и го записва под формата на код. След извършване на няколко стъпки – било то форматиране на данни или изчисления, спираме записа от таб Developer -> Stop Recording.
След записа, връщаме таблицата в изходен вид, и от раздел Developer и бутона Macros (или с клавишна комбинация Alt + F8), се извежда диалоговият прозорец със списък от макросите, вече съществуват. Селектираме макроса, който сме записали, и кликваме на Run.
Процедурни макроси в Excel и VBA
Чрез средата за програмиране Visual Basic Editor на Excel се създават процедури (методи или функции), в които се записва програмен код, който изпълнява желаното от нас действие.
От менюто Developer чрез бутона Visual Basic стартираме Visual Basic Editor, след това е необходимо да се създаде Module и в него процедура.
Задача: създаване на команден и процедурен макрос + решението
Запишете макрос, който автоматично да обработи данните в примерна таблица, като:
- форматира стиловете и шрифтовете;
- отдели фамилните имена на учениците в отделна колона.
Да се създаде процедурен макрос, който преброява оценките, например колко шестици, петици, четворки и тройки има.
Имена | Оценки |
Иван Георгиев | 6 |
Мария Петрова | 5 |
Гергана Георгиева | 6 |
Пешо Димитров | 5 |
Решение на задачата
Създаваме таблицата от примера, като е желателно да обърнем внимание от коя клетка започваме. Препоръчително е да си я копираме някъде в работния лист, за да не губим време и да я пишем всеки път, когато демонстрираме. Примерът от снимката започва от клетка D7.

Вече сме създали таблицата. Сега е моментът да стартираме записването на макрос, от меню Developer -> Record Macro. Слагаме име DataFormat, като спазвам “Camelcase” метод за именуване и име близко до действието, което ще извършва макросът.

Кликваме върху ОК, и се убеждаваме, че Excel вече записва, като Record Macro става Stop Recording.

Продължаваме с основните стъпки. Хубаво е да не допускаме грешки, защото Excel записва всяко движение и го преобразува в програмен код. Ако правим много корекции, те ще бъдат записани като програмен код и в резултат на това ще натрупаме много излишен програмен код. Това не е проблем при демонстрация или решаването на малка задача, но не е добра практика.
Нека преминем към втора стъпка, а именно отделяне на фамилните имена в самостоятелна колона. За целта е необходимо да вмъкнем трета колона между колоните Имена и Оценка. Именуваме новата колона Фамилия, преименуваме първата колона на Име. След това селектираме имената от първата колона. Задължително трябва да са две имена. Ако са трите имена на човек, ще трябва да си вмъкнем още една колона за Презиме.
След като сме селектирали имената, преминаваме към разделянето им. В основното меню кликваме на Data > Text To Columns, от диалоговия прозорец избираме опцията Delimited (в превод, разделяне), кликваме върху Next. В следващия прозорец избираме по какъв критерий искаме да ги разделим. Ибираме Space и кликваме Finish. Вече имаме имената, разделени по един културен начин. Вкарваме си малко стилове на таблицата. За примера може да използваме от предложените от Excel цветове. За тялото на таблицата ще избера цвят с име Good, за хедъра малко по-тъмно зелено, вдигаме шрифтовете и слагаме бордъри. За примера това е достатъчно, иначе може да се импровизира много.

Спираме записването от Developer -> Stop Macro и правим демонстрация. Изтриваме си таблицата изцяло, като не забравяме от коя клетка започва. На нейно място слагаме не форматираната таблица, която е някъде из работния лист. Ако я нямаме, пишем на ново. В нашия случай започваме от D7. Кликваме на Macros и даваме Run на макроса, който е DataFormat.
След изпълнение на макроса, може да демонстрираме във Visual Basic в Modules, кодът на Module 1, който е записал Excel. Например, може да направим някоя промяна – цвета “Good” да го променим на “Bad”, изтриваме таблицата и пействаме неформатираната. Стартираме макроса DataFormat на ново.
Втора част от задачата – процедурни макроси
Стартираме Visual Basic, създаваме нов модул с десен бутон на папката Modules > Insert > Module. В новия модул Module 2 декларираме нова процедура, кръщаваме я GradeCounter (Брояч на оценки) – име близко до действието на процедурата и спазваме добрите практики за именуване.
Декларираме си необходимите променливи и започваме да присвояваме стойности, като използваме готовите функции на Excel.
Започваме с променливата otlichen, пишем равно и извикваме функциите на работния лист WorksheetFunction. Веднага след това пишем точка и извикваме следващата функция CountIf (преброй ако) и спазваме синтаксиса, като изпълним и двата аргумента на функцията CountIf. Първият аргумент е Range, а вторият – условие.

Аналогична е процедурата и с останалите оценки.