Сегодня, на примере, разберем "по шагам" как работает простой макрос форматирования ячейки. В дальнейшем, при создании каких-либо отчетов, вам может пригодиться этот код, когда вы будете выравнивать ячейки и "доводить до ума" вид отчета.
Итак, я заготовил заранее неформатированные ячейки B2, C2, D2, внеся в них значения: B2 = "Привет страна!", D2 = "Макрос выровняет все колонки по ширине", D2 = "2021г."
Откроем редактор макросов (ALT+F11) и наберем следующий код:
Sub Формат_Ячейки()
ActiveCell.Font.Bold = True
ActiveCell.NumberFormat = "@"
ActiveCell.EntireColumn.AutoFit
ActiveCell.BorderAround (xlContinuous)
End Sub
Рассмотрим подробно каждую строку. Все строки начинаются с "волшебного слова" ActiveCell. Что же это такое? ActiveCell - это активная ячейка, т.е. та, на которой в данный момент стоит курсор в текущей книге.
Выделяем ячейку(кликаем мышкой на ячейку) B2 и запускаем наш макрос. (Вкладка "Вид" - "Макросы"). Выбираем "Формат_Ячейки" и жмем "Выполнить"
Если все выполнено верно, получаем такой вид.
Нам остается по очереди выбрать ячейки C2, D2 и "отработать" на них макрос. После всех "манипуляций" у нас должен быть экран примерно такого вида:
Согласитесь, неудобно, каждый раз выбирать ячейку и запускать макрос. Было бы логичнее выделить диапазон и один раз запустить макрос форматирования. Давайте немного изменим код и сделаем все "в один клик"
Sub Формат_Ячейки()
Range(Selection.Address).Font.Bold = True
Range(Selection.Address).NumberFormat = "@"
Range(Selection.Address).EntireColumn.AutoFit
Range(Selection.Address).BorderAround (xlContinuous)
End Sub
В коде макроса это выглядит так (я специально "закомментировал" старые строки, чтобы была видна разница в коде):
Подробнее разберем новые команды в коде. Объект Range - принимает в скобках диапазон ячеек. Если известен какой диапазон нужно обработать, мы могли написать Range("B2:D2") и запустить в обработку, НО, мы же не знаем, какой диапазон ячеек выделил пользователь, поэтому есть "команда" Selection.Address, которая возвращает все адреса выделенных ячеек. Теперь, нам не важно, какие ячейки выделит пользователь. Макрос отработает в любом месте с любым количеством ячеек. Для примера я добавил данных в ячейки нескольких строк
Выделяем мышью диапазон и выполняем макрос. Видим на экране примерно такое:
Как вы заметили, обведена не каждая ячейка контуром, а выделенный диапазон. Если мы изменим последнюю строку макроса Range(Selection.Address).BorderAround (xlContinuous) на Range(Selection.Address).Borders.LineStyle = True, то обведётся каждая ячейка. Свойство Borders.LineStyle позволяет нам обвести выделенный диапазон всех ячеек.(True) или убрать его (False).
Подводя итоги этой статьи, хочу сказать, что всего через 3 урока вы смогли создать свой первый макрос форматирования ячеек, который состоит всего из четырех строк, но позволяет вам форматировать ячейки в MS Excel. Это всего лишь пример макроса форматирования. Вы сами можете сделать свой по аналогии и подобию. Все ограничено лишь вашими желаниями!
В следующей статье я расскажу как сделать макросы по кнопке, чтобы каждый раз не вызывать меню макросов, и, возможно, познакомимся с начальной логикой программирования выбора условий. Все зависит от ваших лайков и комментариев. Всем удачи и хорошего дня!