VBA Excel. Программное создание границ ячеек

Программное создание границ ячеек произвольного диапазона с помощью кода VBA Excel. Свойство Borders объекта Range. Создание границ одной ячейки. Код макроса.

Программное создание границ ячеек

Если записать макрос добавления границ к ячейкам какого-нибудь диапазона, то в тексте макроса будет сгенерировано очень много строк с указанием различных параметров. Создать сетку из границ ячеек с параметрами «по умолчанию» можно гораздо проще.

Создание границ одной ячейки

Создать границы только для одной ячейки в VBA Excel можно следующим образом:

Пример кода записанного макроса

Запись макроса: включаем запись, выбираем диапазон «A1:E9», на панели инструментов выбираем значок «Все границы», останавливаем запись. И это все наши выполненные действия, а в результате получаем следующий код:

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

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

Создание и удаление диагональных линий

Диагональные линии не относятся к границам ячеек, но принцип работы с ними тот же. Отличие заключается в том, что для отображения и удаления диагональных линий, их необходимо указывать явно:

Расположение границ ячеек и диапазонов

Расположение границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlBordersIndex.

Список констант XlBordersIndex:

Константа Значение Описание
xlDiagonalDown 5 Диагональная линия от верхнего левого угла к нижнему правому углу в каждой ячейке диапазона.
xlDiagonalUp 6 Диагональная линия от нижнего левого угла к правому верхнему углу в каждой ячейке диапазона.
xlEdgeBottom 9 Граница по нижнему краю диапазона.
xlEdgeLeft 7 Граница по левому краю диапазона.
xlEdgeRight 10 Граница по правому краю диапазона.
xlEdgeTop 8 Граница по верхнему краю диапазона.
xlInsideHorizontal 12 Горизонтальные границы для всех ячеек в диапазоне, за исключением внешних границ диапазона.
xlInsideVertical 11 Вертикальные границы для всех ячеек в диапазоне, за исключением внешних границ диапазона.

Толщина границ ячеек и диапазонов

Толщину границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlBorderWeight.

Список констант XlBorderWeight:

Константа Значение Описание
xlHairline 1 Очень тонкая граница
xlThin 2 Тонкая граница (по умолчанию)
xlMedium -4138 | 3* Граница средней толщины
xlThick 4 Толстая граница

* У меня, в Excel 2016, константе xlMedium соответствует не только числовое значение -4138, но и 3.

Стили границ (типы линий)

Стили границ по краям и внутри ячеек и диапазонов описывают константы из коллекции XlLineStyle.

Список констант XlLineStyle:

Константа Значение Описание
xlContinuous 1 Непрерывная линия
xlDash -4115 Штриховая линия
xlDashDot 4 Чередование точек и тире
xlDashDotDot 5 Чередование двух точек и тире
xlDot -4118 Пунктирная линия
xlDouble -4119 Двойная линия
xlLineStyleNone -4142 Нет границы (удаление границы)
xlSlantDashDot 13 Линия, разрезанная двойными слешами

Применяем разные типы линий к разным сторонам выделенного диапазона:

Какие могут быть границы в сочетаниях типа линии и ее толщины, вы можете видеть в диалоговом окне «Формат ячеек» на вкладке «Граница».


Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

8 комментариев для “VBA Excel. Программное создание границ ячеек”

  1. Удалить границы можно с помощью строки:

    обратите внимание, что диагональные линии этим способом не удаляются

    1. Евгений

      Вы правы, для удаления диагональных линий, их необходимо указывать явно:

  2. Здравствуйте!
    А как правильно создавать границы для именованных диапазонов?
    Я пока только понял, как их выделять
    [диапазон].Select
    или
    Range("диапазон").Select
    и работать уже с выделением, что, на мой взгляд, неправильно.
    Спасибо!

  3. Здравствуйте!
    Можно ли программно выбирать константу. Например вставить i в Range.Borders(i) и таким образом пробежаться или выбрать границу (верхнюю, левую и т. д.).

    1. Евгений

      Добрый вечер, Андрей!
      Можно создать массив с константами или использовать их числовые индексы:

      1. Спасибо!
        Создал вот такую процедурку. Может кому пригодится.

Добавить комментарий

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