Найти в Дзене

VBA для Excel простыми словами. #3. Простой макрос форматирования ячейки.

Сегодня, на примере, разберем "по шагам" как работает простой макрос форматирования ячейки. В дальнейшем, при создании каких-либо отчетов, вам может пригодиться этот код, когда вы будете выравнивать ячейки и "доводить до ума" вид отчета.

Итак, я заготовил заранее неформатированные ячейки 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. Это всего лишь пример макроса форматирования. Вы сами можете сделать свой по аналогии и подобию. Все ограничено лишь вашими желаниями!

В следующей статье я расскажу как сделать макросы по кнопке, чтобы каждый раз не вызывать меню макросов, и, возможно, познакомимся с начальной логикой программирования выбора условий. Все зависит от ваших лайков и комментариев. Всем удачи и хорошего дня!

Наука
7 млн интересуются