Макросы Excel
Большинство специалистов, работающих с электронными таблицами, изо дня в день составляют свои отчеты, выполняя одни и те же действия. Несмотря на то, что это занимает у них не так много времени, так как все происходит уже на «автомате», все же можно уменьшить в разы трудозатраты, освободив значительную часть рабочего времени под другие задачи либо отдых.
Приложение Excel умеет записывать все действия пользователя с помощью макрорекодера, создавая специальную программу на языке программирования Visual Basic for Application (VBA), которую в последующем можно запустить для исполнения. При этом Вам не нужно быть программистом или иметь специальное образование.
Когда не следует записывать макрос?
Не для всех рутинных задач возможно использовать макросы. Например, если при определенных условиях алгоритм действий должен измениться, то простая запись макрорекодером Вам не поможет, так как в программу необходимо закладывать логику. Аналогичная ситуация возникает, когда исходные данные меняют свою структуру или могут содержать ошибки.
В принципе, автоматизировать процессы в случаях, описанных выше, можно, но потребуются знания логических конструкций языка VBA, но это тема другой статьи, относящейся к программированию. На данном этапе можно посоветовать разделить одну большую задачу на несколько мелких и определить, какие из них могут быть записаны, а какие следует выполнять самостоятельно.
Подготовка к созданию макроса
В связи с тем, что макросы Excel записывают все действия пользователя (выделение ячеек, скроллинг таблицы, копирование и т.п.), то изначально требуется продумать все шаги, которые Вы хотите автоматизировать.
В качестве примера создадим простой макрос, задающей ячейке наш стиль. Определим какие шаги надо выполнить:
- Установить шрифт;
- Задать заливку;
- Задать границы.
Больше никаких действий мы не должны производить. Если мы начнем запись макроса с выделения какого-либо диапазона, то при последующих запусках будет выделяться именно он, что не соответствует нашей цели.
Запись макроса
Теперь произведем саму запись. Выделите любую ячейку, которой необходимо задать стиль (это может быть любая ячейка, главное не меняйте ее во время записи). Перейдите на вкладку «Вид», найдите область «Макросы». Раскройте меню, кликнув по стрелочке, и выберите пункт «Запись макроса». Не обращайте внимание на появившееся окно, его параметры будут рассмотрены дальше, просто нажмите кнопку «OK».
Установите границы, цвет заливки, курсивное начертание текста и шрифт Times New Roman. Остановите запись, используя то же меню. Сейчас там должен находиться пункт «Остановить запись», – выберите его.
Запуск макроса и назначение горячих клавиш
После остановки макрорекодера, протестируйте работу нового макроса. Для этого кликнете по пиктограмме «Макросы» на ленте вкладки «Вид». Должно появиться следующее окно со списком все макросов открытых книг:
Нажмите кнопку «Выполнить». Выделенный диапазон должен поменять свое оформление на то, которое Вы определили во время записи.
Если запускать процедуру придется часто, то есть смысл назначить ей горячие клавиши. Кликните кнопку «Параметры» в том же окне. На экране появиться такой диалог:
- Имя макроса – его поменять здесь нельзя. Это возможно сделать только в коде записанной процедуры.
- Сочетание клавиш – укажите один символ того языка, в раскладке которого чаще приходиться работать, так как, например, сочетания Ctrl + q и Ctrl + й являются разными, но находятся на одной клавише. Так же имеет значение регистр символа. Если указать символ «Й», то горячими клавишами будет служить сочетание Ctrl + Shift + й.
- Описание – служит памяткой тому, кто записал макрос, и пояснением остальным.
Все выше указанные параметры можно задать при запуске макрорекодера.
Изменение макроса
Для редактирования записанных процедур требуются знания языка VBA, но в этом разделе все же рассмотрим простейший пример, чтобы понять сам принцип.
Отобразите окно с макросами, выберите любой из имеющихся и нажмите кнопку «Изменить». Программа Вас перенаправит в редактор Visual Basic в модуль с кодом выбранного макроса. Если Вы точно следовали статье, то на экране должен быть приблизительно следующий скрипт (зеленый текст, расположенный после апострофа, является комментарием и не выполняется программой):
Sub Макрос1() ' Каждая процедура начинается с оператора Sub, после которого следует имя макроса, заканчивающееся скобками ' Можно поменять название, заменив первую строчку на Sub МояПроцедура() ' Макрос1 Макрос ' ' ' Здесь начинается код, повторяющий записанные действия пользователя ' Обратите внимание, что во многих строках присутствует объект Selection. Это значит, что ' действия производятся с выбранным на данный момент диапазоном ' Начало участка кода, отвечающего за оформление границ Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone ' Конец участка кода, отвечающего за оформление границ ' Начало кода, отвечающего за заливку With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With ' Конец кода, отвечающего за заливку ' Начало кода, оформляющего шрифт, размер и начертание текста With Selection.Font .Name = "Times New Roman" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With Selection.Font.Italic = True ' Конец кода, оформляющего шрифт, размер и начертание текста ' Последняя строка сообщает об окончании процедуры End Sub
Не будем ничего менять, а только дополним его двумя строками, которые будут выводить в строке статуса нужную информацию. Это позволит нам определить, что процедура завершила свою работу.
Дополните Ваш код в соответствии с нижеприведенным образцом:
Sub Макрос1() Application.StatusBar = "Ждите. Меняем формат" ' здесь должен находиться код, записанный макросом Application.StatusBar = "Стиль изменен" End Sub
Запустите макрос и убедитесь, что внизу страницы появилось наше сообщение:
Примечание:
Сохраняя книгу с макросами, необходимо выбрать расширение файла .xlsm, иначе все процедуры сотрутся.