Vba excel выделить все границы

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

‘Для этого необходима всего одна строка:

Range(«A1:G7»).Borders.LineStyle = True

‘Вместо ключевого слова True можно

‘использовать константу xlContinuous:

Range(«A1:G7»).Borders.LineStyle = xlContinuous

‘Кроме того, для создания границ ячеек можно

‘использовать единственную строку с указанием

‘какого-нибудь параметра, например,

‘для создания сетки из синих границ:

Range(«A1:G7»).Borders.Color = vbBlue

‘или для создания сетки из границ в виде двойных линий:

Range(«A1:G7»).Borders.LineStyle = xlDouble

‘Чтобы применить при создании границ два

‘параметра, придется использовать уже две

‘строки кода, например, для создания сетки

‘из границ в виде жирных красных линий:

Range(«A1:G7»).Borders.Weight = xlThick

Range(«A1:G7»).Borders.Color = vbRed

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

Range(«A1:G7»).Borders.LineStyle = False

‘Вместо ключевого слова False можно

‘использовать константу xlNone:

Range(«A1:G7»).Borders.LineStyle = xlNone

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

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

Range(«A5»).Borders.LineStyle = True

Cells(2, 8).Borders.Color = vbBlue

ActiveCell.Borders.LineStyle = xlDouble

‘Удаление границ:

ActiveCell.Borders.LineStyle = False

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

Sub Макрос1()

    Range(«A1:E9»).Select

‘Отображается левая граница диапазона

    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

‘Отображаются внутренние вертикальные линии

    With Selection.Borders(xlInsideVertical)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

‘Отображаются внутренние горизонтальные линии

    With Selection.Borders(xlInsideHorizontal)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlThin

    End With

End Sub

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

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

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

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

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

Range(«A1:G7»).Borders(xlDiagonalDown).LineStyle = True

Range(«A1:G7»).Borders(xlDiagonalUp).LineStyle = True

‘Удаление диагональных линий:

Range(«A1:G7»).Borders(xlDiagonalDown).LineStyle = xlNone

Range(«A1:G7»).Borders(xlDiagonalUp).LineStyle = xlNone

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

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

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

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

‘Отображаем у выделенной ячейки нижнюю границу с толщиной и стилем по умолчанию (xlThin и xlContinuous)

ActiveCell.Borders(xlEdgeBottom).LineStyle = True

ActiveCell.Borders(xlEdgeBottom).LineStyle = 1

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

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

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

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

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

‘Отображаем у выделенной ячейки нижнюю границу в виде толстой линии

ActiveCell.Borders(xlEdgeBottom).Weight = xlThick

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

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

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

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

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

Sub Primer()

    With Selection

        .Borders(xlEdgeTop).LineStyle = xlDash

        .Borders(xlEdgeTop).Weight = xlMedium

        .Borders(xlEdgeRight).LineStyle = xlDouble

        .Borders(xlEdgeBottom).LineStyle = xlDot

        .Borders(xlEdgeLeft).LineStyle = xlDashDot

    End With

End Sub

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


 

Vbauser

Пользователь

Сообщений: 13
Регистрация: 15.12.2016

Здравствуйте, помогите пожалуйста разобраться.
Задача, в выделенном диапазоне (в одном столбце), выделить ячейки у которых есть границы (все границы).
Нужно это на VBA. Пробовал через поиск «Найти» — Ячейка по формату все работает все выделяет. Пробовал записать свои действия макрорекордером. Не получается. Он не записывает формат ячеек. Вобщем на VBA так не получается.  

Скорость не важна…..особенно если ты не туда едешь.

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#2

22.12.2016 09:52:40

Цитата
Vbauser написал: Вобщем на VBA так не получается.

На VBA так получается, но практическое применение такого подхода черевато череватыми последствиями. И в 99.9% случаях ВЫДЕЛЯТЬ ячейки, для того что-бы произвести с ними какие-то действия, не нужно. Вы опишите Вашу ЗАДАЧУ, а не то, как Вы пытаетесь ее решить

Согласие есть продукт при полном непротивлении сторон.

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

Посмотрите Application.FindFormat
У Уокенбаха есть «Выделение всех ячеек с определенным форматированием»

 

Vbauser

Пользователь

Сообщений: 13
Регистрация: 15.12.2016

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

Скорость не важна…..особенно если ты не туда едешь.

 

Vbauser

Пользователь

Сообщений: 13
Регистрация: 15.12.2016

Kuzmich

, я не нашел Уокенбаха)))

Скорость не важна…..особенно если ты не туда едешь.

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#6

22.12.2016 10:32:26

Цитата
Приходят накладные в них данные

Так и приведите пример накладных и сводного файла

 

Михаил Лебедев

Пользователь

Сообщений: 2855
Регистрация: 17.01.2013

#7

22.12.2016 10:41:51

Цитата
Vbauser написал:
Пробовал через поиск «Найти» — Ячейка по формату все работает все выделяет.

Работает. Находит. Но не выделяет же. Зачем Вам нужно их выделять?
Ну, допустим, так ▼

Код
Sub Макрос3()
    Dim str1 As String, str2 As String
    Application.FindFormat.Clear
    Range("A1").Select
    With Range("A1:A9")
        With Application.FindFormat.Borders(xlLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Application.FindFormat.Borders(xlRight)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Application.FindFormat.Borders(xlTop)
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Application.FindFormat.Borders(xlBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        str1 = .Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=True).Address
        str2 = .FindNext(After:=ActiveCell).Offset(-1).Address
        Range(str1 & ":" & str2).Select
    End With
End Sub

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#8

22.12.2016 10:53:50

Цитата
Kuzmich, я не нашел Уокенбаха)))

Вот пример кода из Уокенбаха, у

Михаил Лебедев

принцип тот же

Код
Sub SelectByFormat()
   'выделяет ячейки на основе их форматирования в Excel2002 и выше
 If Val(Application.Version) < 10 Then
    MsgBox "Необходим Excel 2002 или выше"
 Exit Sub
 End If
 Dim FirstCell As Range, FoundCell As Range
 Dim AllCells As Range
' определение форматирования
 With Application.FindFormat
   .Clear
   .Interior.ColorIndex = 6 'желтый
   .Font.Bold = True
 End With
' поиск первой соответствующей ячейки
 Set FirstCell = Cells.Find(What:="", SearchFormat:=True)
' если ячейка не найдена, выход
 If FirstCell Is Nothing Then
    MsgBox "Ячейки указанного формата не найдены"
    Exit Sub
 End If
' инициализация AllCells
 Set AllCells = FirstCell
 Set FoundCell = FirstCell
' просмотр, пока не будет найдена ячейка FirstCell
 Do
    Set FoundCell = Cells.FindNext(After:=FoundCell)
    Set AllCells = Union(FoundCell, AllCells)
    If FoundCell.Address = FirstCell.Address Then Exit Do
 Loop
' выделение найденных ячеек и сообщение пользователю
 AllCells.Select
    MsgBox "Найдено ячеек: " & AllCells.Count
End Sub
 

Михаил Лебедев

Пользователь

Сообщений: 2855
Регистрация: 17.01.2013

#9

22.12.2016 10:56:15

Цитата
Vbauser написал:
В этих ячейках бывают пустые строки, но они тоже с границами. Поэтому решил выделить не пустые строки т. к их множество, а именно с границами.

М.б. Вы описались здесь? Какая-то белиберда, по-моему, получилась :)

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Vbauser

Пользователь

Сообщений: 13
Регистрация: 15.12.2016

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

Прикрепленные файлы

  • Книга2.xlsm (12.85 КБ)

Скорость не важна…..особенно если ты не туда едешь.

 

Vbauser

Пользователь

Сообщений: 13
Регистрация: 15.12.2016

Михаил Лебедев

Ваш код работал, но немного не так, он выделял ячейки с границами начиная со следующей после активной. Хоть так работало, а сейчас вообще не работает. Не пойму почему…….

Скорость не важна…..особенно если ты не туда едешь.

 

Тогда попробуйте код от Уокенбаха (см. сообщ. от Kuzmich)

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Vbauser

Пользователь

Сообщений: 13
Регистрация: 15.12.2016

#13

22.12.2016 14:50:15

Не получается и этим кодом,

Код
Sub SelectByFormat()
   'выделяет ячейки на основе их форматирования в Excel2002 и выше
 If Val(Application.Version) < 10 Then
    MsgBox "Необходим Excel 2002 или выше"
 Exit Sub
 End If
 Dim FirstCell As Range, FoundCell As Range
 Dim AllCells As Range
' определение форматирования
Range("A1:A20").Select
 With Application.FindFormat.Borders
 

   .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
   'желтый
   
 
 End With
' поиск первой соответствующей ячейки
 Set FirstCell = Cells.Find(What:="", SearchFormat:=True)
' если ячейка не найдена, выход
 If FirstCell Is Nothing Then
    MsgBox "Ячейки указанного формата не найдены"
    Exit Sub
 End If
' инициализация AllCells
 Set AllCells = FirstCell
 Set FoundCell = FirstCell
' просмотр, пока не будет найдена ячейка FirstCell
 Do
    Set FoundCell = Cells.FindNext(After:=FoundCell)
    Set AllCells = Union(FoundCell, AllCells)
    If FoundCell.Address = FirstCell.Address Then Exit Do
 Loop
' выделение найденных ячеек и сообщение пользователю
 AllCells.Select
    MsgBox "Найдено ячеек: " & AllCells.Count
End Sub
Код

Скорость не важна…..особенно если ты не туда едешь.

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#14

22.12.2016 15:08:35

Цитата
.ColorIndex = 0

А какой у вас цвет границ ?

 

Vbauser

Пользователь

Сообщений: 13
Регистрация: 15.12.2016

Черный

Скорость не важна…..особенно если ты не туда едешь.

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#16

22.12.2016 18:35:37

Код
Sub мяу()
    Dim cell As Range, r As Range
    For Each cell In Selection.Cells
        If cell.Borders.LineStyle = 1 Then
            If r Is Nothing Then
                Set r = cell
            Else
                Set r = Union(r, cell)
            End If
        End If
    Next
    r.Select
End Sub
 

Vbauser

Пользователь

Сообщений: 13
Регистрация: 15.12.2016

Спасибо попробую, отпишусь.

Скорость не важна…..особенно если ты не туда едешь.

 

Vbauser

Пользователь

Сообщений: 13
Регистрация: 15.12.2016

Все работает. Спасибо всем за ответы и старания помочь, очень это ценю. Из этой ситуации я пытался выйти уже дней 5. Никак не мог.

RAN

, спасибо вам код действительно работает.

Скорость не важна…..особенно если ты не туда едешь.

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#19

22.12.2016 20:17:05

Vbauser

Для черного цвета

Код
.ColorIndex = 1

To apply borders to a cell using VBA in Excel, you can use two different ways. The first is the “Borders“ property and the second is the “BorderAround” method. The only difference between these two ways is in the “Borders” property you can even apply the border to one side of the cell and in the border around it applies to the cell completely.

In this tutorial, we will explore both ways and look at what are the different ways to add the border.

VBA Border Property

  1. First, you need to specify the range or the cell where you wish to apply the border using the range object.
    1-specify-the-range-or-cell
  2. After that, type a dot (.) and then select the “Borders” property from the list of properties and methods.
    2-type-a-dot-and-then-select-the-border
  3. Next, specify the border index from the contants avaiable. Here I’m using “xlEdgeBottom” to apply border only to the bottom of the cell.
    3-specify-the-border-index
  4. From here, specify the line style using the “LineStyle”. I’m using the “xlContinuonus” as the line style.
    4-specify-the-line-style
Sub vba_borders()

Range("A1") _
        .Borders(xlEdgeBottom) _
            .LineStyle = XlLineStyle.xlContinuous

End Sub

Now when you run this code, it will add a border to the bottom of the cell A1.

Using Different Colors with Color Index/Color

Just like you normally choose the color for the border when you do it manually. In the border property, you can further use the color index and color property to use a color other than the default color.

Consider the below code.

With Range("A1").Borders(xlEdgeBottom)

            .LineStyle = XlLineStyle.xlContinuous
            .Color = RGB(255, 0, 0)

End With

When you run this macro, it adds a border to the bottom of the cell with a red color.

Or if you want to use the colorindex property then the code would be like.

With Range("A1").Borders(xlEdgeBottom)

            .LineStyle = XlLineStyle.xlContinuous
            .ColorIndex = 7

End With

Related: VBA With Statement

Add Border Inside a Cell

If you want to apply a border inside a cell, in that case, you need to use “xlDiagonalUp” and “xlDiagonalDown” as the xlBorderIndex.

With Range("A1").Borders(xlDiagonalUp)

            .LineStyle = XlLineStyle.xlDashDotDot
            .Color = RGB(255, 0, 0)

End With

With Range("A1").Borders(xlDiagonalDown)

            .LineStyle = XlLineStyle.xlDashDotDot
            .Color = RGB(255, 0, 0)

End With

When you run the above code, it adds a border inside the cell upward and downward.

VBA BorderAround Method

In VBA’s BorderAround property you have 5 arguments to which are optional but two need to be specified to apply the border to a cell in the right way.

The following code applies the border around the range A1:A3 when you run the macro.

Range("A1:A3").BorderAround _
                LineStyle:=xlContinuous, _
                Weight:=xlThin

Add Border to Each Cell in the Range

The following code loops through all the cells in the range and applies the border to each cell one by one.

Sub vba_borders()

Dim iRange As Range
Dim iCells As Range

Set iRange = Range("A1:A10")

For Each iCells In iRange
    iCells.BorderAround _
            LineStyle:=xlContinuous, _
            Weight:=xlThin
Next iCells

End Sub

Apply Border to All the Cells with Text

The following code uses a FOR LOOP, USED RANGE, IFEMPTY, and IF STATEMENT  to apply borders to the only cells where you have value.

Dim iRange As Range
Dim iCells As Range

Set iRange = ThisWorkbook.ActiveSheet.UsedRange

For Each iCells In iRange
    If Not IsEmpty(iCells) Then
    iCells.BorderAround _
            LineStyle:=xlContinuous, _
            Weight:=xlThin
    End If
Next iCells

Remove Borders

You just need to use line style “xlNone”.  

Range("A1").Borders(xlDiagonalDown).LineStyle = xlNone

And if you want to remove the border from all the cells in a worksheet where you have a value, consider the following code.

Dim iRange As Range
Dim iCells As Range

Set iRange = ThisWorkbook.ActiveSheet.UsedRange

For Each iCells In iRange
    If Not IsEmpty(iCells) Then
        iCells.Borders(xlDiagonalDown).LineStyle = xlNone
    End If
Next iCells

More Tutorials

    • Count Rows using VBA in Excel
    • Excel VBA Font (Color, Size, Type, and Bold)
    • Excel VBA Hide and Unhide a Column or a Row
    • Excel VBA Range – Working with Range and Cells in VBA
    • Find Last Row, Column, and Cell using VBA in Excel
    • Insert a Row using VBA in Excel
    • Merge Cells in Excel using a VBA Code
    • Select a Range/Cell using VBA in Excel
    • SELECT ALL the Cells in a Worksheet using a VBA Code
    • ActiveCell in VBA in Excel
    • Special Cells Method in VBA in Excel
    • UsedRange Property in VBA in Excel
    • VBA AutoFit (Rows, Column, or the Entire Worksheet)
    • VBA ClearContents (from a Cell, Range, or Entire Worksheet)
    • VBA Copy Range to Another Sheet + Workbook
    • VBA Enter Value in a Cell (Set, Get and Change)
    • VBA Insert Column (Single and Multiple)
    • VBA Named Range | (Static + from Selection + Dynamic)
    • VBA Range Offset
    • VBA Sort Range | (Descending, Multiple Columns, Sort Orientation
    • VBA Wrap Text (Cell, Range, and Entire Worksheet)
    • VBA Check IF a Cell is Empty + Multiple Cells

    ⇠ Back to What is VBA in Excel

    Helpful Links – Developer Tab – Visual Basic Editor – Run a Macro – Personal Macro Workbook – Excel Macro Recorder – VBA Interview Questions – VBA Codes

    Содержание

    1. Объект Borders (Excel)
    2. Замечания
    3. Примеры
    4. Свойства
    5. См. также
    6. Поддержка и обратная связь
    7. Borders object (Excel)
    8. Remarks
    9. Examples
    10. Properties
    11. See also
    12. Support and feedback
    13. Как сделать границы ячеек макросом в таблице Excel
    14. Как изменить границы макросом в ячейках таблицы Excel
    15. Метод Range.BorderAround (Excel)
    16. Синтаксис
    17. Параметры
    18. Возвращаемое значение
    19. Примечания
    20. Пример
    21. Поддержка и обратная связь
    22. VBA Excel. Программное создание границ ячеек
    23. Программное создание границ ячеек
    24. Создание границ одной ячейки
    25. Пример кода записанного макроса
    26. Создание и удаление диагональных линий
    27. Расположение границ ячеек и диапазонов
    28. Толщина границ ячеек и диапазонов
    29. Стили границ (типы линий)

    Объект Borders (Excel)

    Коллекция из четырех объектов Border , представляющих четыре границы объекта Range или объекта Style .

    Замечания

    Используйте свойство Borders , чтобы вернуть коллекцию Borders , которая содержит все четыре границы. Можно применить разные границы к каждой стороне ячейки или диапазона. Дополнительные сведения о применении границ к диапазону ячеек см. в разделе Свойство Range.Borders .

    Вы можете задать свойства границы для отдельной границы только с помощью объектов Range и Style . Другие объекты с границами, такие как полосы ошибок и линии рядов, имеют границу, которая обрабатывается как одна сущность, независимо от того, сколько сторон она имеет. Для этих объектов необходимо возвращать и задавать свойства для всей границы в виде единицы. Дополнительные сведения см. в разделе Объект Border .

    Примеры

    В следующем примере двойная граница добавляется в ячейку A1 на одном листе.

    Используйте border (index), где индекс определяет границу, чтобы вернуть один объект Border . Индекс может быть одной из следующих констант XlBordersIndex : xlDiagonalDown, xlDiagonalUp, xlEdgeBottom, xlEdgeLeft, xlEdgeRight, xlEdgeTop, xlInsideHorizontal или xlInsideVertical.

    В следующем примере задается красный цвет нижней границы ячеек A1:G1.

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

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

    Свойства

    См. также

    Поддержка и обратная связь

    Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

    Источник

    Borders object (Excel)

    A collection of four Border objects that represent the four borders of a Range object or Style object.

    Use the Borders property to return the Borders collection, which contains all four borders. You can apply different borders to each side of a cell or range. For more information how to apply borders to a range of cells, see Range.Borders property.

    You can set border properties for an individual border only with Range and Style objects. Other bordered objects, such as error bars and series lines, have a border that’s treated as a single entity, regardless of how many sides it has. For these objects, you must return and set properties for the entire border as a unit. For more information, see the Border object.

    Examples

    The following example adds a double border to cell A1 on worksheet one.

    Use Borders (index), where index identifies the border, to return a single Border object. Index can be one of the following XlBordersIndex constants: xlDiagonalDown, xlDiagonalUp, xlEdgeBottom, xlEdgeLeft, xlEdgeRight, xlEdgeTop, xlInsideHorizontal, or xlInsideVertical.

    The following example sets the color of the bottom border of cells A1:G1 to red.

    The following example generates a thin border around all cells in the range.

    The following example changes only the inner cell borders of the range.

    Properties

    See also

    Support and feedback

    Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

    Источник

    Как сделать границы ячеек макросом в таблице Excel

    Рисовать границы для разных ячеек вручную – это потребует много драгоценного времени и сил. Лучше применить специальный макрос, который сам поставит границы с разными типами и цветами линий для объединенных и необъединенных ячеек. Он автоматически определит положение объединенных ячеек и сам присвоит им линии границ в соответствии со всеми пожеланиями пользователя.

    Как изменить границы макросом в ячейках таблицы Excel

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

    1. Отформатировать ячейки таблицы таким образом, чтобы были установленные границы с толстой линией только для диапазонов каждого отдельного штата. А внутри группы городов каждого штата необходимо установить ячейкам границы с тонкой линией.
    2. Таким же образом хотим форматировать ячейки в объединенных диапазонах, охватывающих несколько столбцов. А, столбцы с показателями продаж и выручки необходимо отделить тонкими линиями. Дополнительно целая таблица должна иметь самую толстую линию для внешней границы по периметру.
    3. Если объединенная ячейка охватывает несколько строк, то границы ячеек, отделяющие эти строки, будут иметь тоненькие линии. По аналогичному принципу будут определены границы столбцов которых охватывает объединенная ячейка.

    Напишем свой макрос, который сам автоматически выполнит весь этот объем работы для любой таблицы. Откройте редактор Visual Basic (ALT+F11):

    А затем создайте новый модуль с помощью инструмента: «Insert»-«Module». А потом введите в него следующий VBA-код:

    Sub BorderLine()
    Dim i As Long
    Selection.Borders(xlEdgeBottom).Weight = xlMedium
    Selection.Borders(xlEdgeTop).Weight = xlMedium
    Selection.Borders(xlEdgeLeft).Weight = xlMedium
    Selection.Borders(xlEdgeRight).Weight = xlMedium
    Selection.Borders(xlInsideHorizontal).Weight = xlThin
    Selection.Borders(xlInsideVertical).Weight = xlThin
    For i = 1 To Selection.Count
    If Selection(i).MergeArea.Address <> Selection(i).Address Then
    Application.Intersect(Selection, Selection(i).MergeArea.EntireColumn).Borders(xlInsideVertical).Weight = xlHairline
    Application.Intersect(Selection, Selection(i).MergeArea.EntireRow).Borders(xlInsideHorizontal).Weight = xlHairline
    End If
    Next
    End Sub

    Теперь если мы хотим автоматически форматировать целую таблицу в один клик мышки, выделите диапазон A1:D18. А потом просто выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«BorderLine»-«Выполнить».

    Чтобы группы данных по строкам и столбцам на против объединенных ячеек были экспонированы границами пользовательской толщены, сначала кода присваиваем линию увеличенной толщины для внешних границ выделенного диапазона. А внутренним границам присваивается линия со стандартной толщиной. Далее с помощью цикла выполняется проход по каждой ячейке выделенного диапазона и все они проверяются. Если ячейка является объединенной, то ей присваивается соответственная граница. Конечно же изменения границ касаются только для ячеек внутри выделенного диапазона.

    С помощью свойства Weight можно установить 4 типа толщины линии для границ ячеек:

    1. xlThink – наиболее толстая линия.
    2. xlMedium – просто толстая граница.
    3. xlThin – стандартная толщина линии для границ.
    4. xlHairLine – свойство для самой тонкой границы ячейки.

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

    Selection.Borders.Color = vbBlack Selection.Borders.Color = xlContinuous

    Полная версия макроса, работающего безошибочно при любых условиях и форматах для исходной таблицы:

    Sub BorderLine()
    Dim i As Long
    Selection.Borders.Color = vbBlack
    Selection.Borders.Color = xlContinuous
    Selection.Borders(xlEdgeBottom).Weight = xlMedium
    Selection.Borders(xlEdgeTop).Weight = xlMedium
    Selection.Borders(xlEdgeLeft).Weight = xlMedium
    Selection.Borders(xlEdgeRight).Weight = xlMedium
    Selection.Borders(xlInsideHorizontal).Weight = xlThin
    Selection.Borders(xlInsideVertical).Weight = xlThin
    For i = 1 To Selection.Count
    If Selection(i).MergeArea.Address <> Selection(i).Address Then
    Application.Intersect(Selection, Selection(i).MergeArea.EntireColumn).Borders(xlInsideVertical).Weight = xlHairline
    Application.Intersect(Selection, Selection(i).MergeArea.EntireRow).Borders(xlInsideHorizontal).Weight = xlHairline
    End If
    Next
    End Sub

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

    Источник

    Метод Range.BorderAround (Excel)

    Добавляет границу в диапазон и задает свойства Color, LineStyle и Weight объекта Border для новой границы. Variant.

    Синтаксис

    expression. BorderAround (LineStyle, Weight, ColorIndex, Color, ThemeColor)

    выражение: переменная, представляющая объект Range.

    Параметры

    Имя Обязательный или необязательный Тип данных Описание
    LineStyle Необязательный Variant Одна из констант XlLineStyle , задающая стиль линии для границы.
    Weight (Вес) Необязательный XlBorderWeight Вес границы.
    ColorIndex Необязательный XlColorIndex Цвет границы в виде индекса текущей цветовой палитры или как константы XlColorIndex .
    Color Необязательный Variant Цвет границы в виде значения RGB.
    ThemeColor Необязательный Variant Цвет темы в качестве индекса текущей цветовой темы или значения XlThemeColor .

    Возвращаемое значение

    Примечания

    Необходимо указать только одно из следующих значений: ColorIndex, Color или ThemeColor.

    Можно указать lineStyle или Weight, но не оба варианта. Если не указать ни один из аргументов, Microsoft Excel использует стиль строки и вес по умолчанию.

    Этот метод описывает весь диапазон без его заполнения. Чтобы задать границы всех ячеек, необходимо задать свойства Color, LineStyle и Weight для коллекции Borders . Чтобы очистить границу, необходимо задать для свойства LineStyle значение xlLineStyleNone для всех ячеек в диапазоне.

    Пример

    В этом примере вокруг диапазона A1:D4 на листе Sheet1 добавляется толстая красная граница.

    Поддержка и обратная связь

    Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

    Источник

    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 Линия, разрезанная двойными слешами

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

    Источник

    intersk

    114 / 4 / 0

    Регистрация: 07.09.2014

    Сообщений: 329

    1

    12.02.2015, 10:52. Показов 7652. Ответов 3

    Метки нет (Все метки)


    Студворк — интернет-сервис помощи студентам

    Задача: задать форматирование ячеек Excel, конкретно выделить все границы ячеек внутри диапазона одинарной тонкой линией определенного цвета (кроме диагоналей).
    Есть два варианта — «короткий» (make_border_1) и «длинный» (make_border_2)
    Короткий вариант ставит только одну границу каждой ячейки диапазона, а длинный красит объединяя все ячейки диапазона. См. скрины

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    
    Public Sub make_border_1()
    ' задаем диапазон выбора ячеек и задаем им форматирование границ
    Set rng = .Range("B" & Rowss2, "F" & Rowss2)
    rng.HorizontalAlignment = xlRight 'xlCenter
    rng.Borders.Color = vbRed
     
    Set rng = Nothing
     
    End Sub
     
    Public Sub make_border_2()
    'границы Макрос
     
    Const xlEdgeLeft = 7, xlEdgeTop = 8, xlEdgeBottom = 9, xlEdgeRight = 10
    Const xlContinuous = 1, xlThin = 2
    Const xlDiagonalDown = 5, xlDiagonalUp = 6, xlInsideVertical = 11, xlInsideHorizontal = 12
    Const xlAutomatic = -4105
     
    ' задаем диапазон выбора ячеек и задаем им форматирование границ
    Set rng = .Range("B" & Rowss2, "F" & Rowss2)
     
    rng.HorizontalAlignment = xlLeft
    rng.Borders(xlDiagonalDown).LineStyle = xlNone
    rng.Borders(xlDiagonalUp).LineStyle = xlNone
        
        With rng.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 3 'xlAutomatic
            '.TintAndShade = 0
            .Weight = xlThin
        End With
        With rng.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = 3
            '.TintAndShade = 0
            .Weight = xlThin
        End With
        With rng.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 3
            '.TintAndShade = 0
            .Weight = xlThin
        End With
        With rng.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .ColorIndex = 3
            '.TintAndShade = 0
            .Weight = xlThin
        End With
     
    rng.Borders(xlInsideVertical).LineStyle = xlNone
    rng.Borders(xlInsideHorizontal).LineStyle = xlNone
     
    Set rng = Nothing
     
    End Sub

    Видимо нужно идти по «длинному» варианту, но нужно указать что красить нужно не диапазон целиком , а все ячейки в диапазоне. Как сделать такое указание? где то здесь получается нужно перечислить все ячейки, а не использовать range

    Visual Basic
    1
    
    Set rng = .Range("B" & Rowss2, "F" & Rowss2)

    Миниатюры

    Как установить границы ячейки Excel из VBA (Access)
     

    Как установить границы ячейки Excel из VBA (Access)
     



    0



    Programming

    Эксперт

    94731 / 64177 / 26122

    Регистрация: 12.04.2006

    Сообщений: 116,782

    12.02.2015, 10:52

    3

    intersk

    114 / 4 / 0

    Регистрация: 07.09.2014

    Сообщений: 329

    12.02.2015, 11:28

     [ТС]

    2

    Решение по длинному варианту: не хватало просто ещё двух линий (в первый раз при записи макроса через Excel я выделял только ячейку а не диапазон )

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
     With rng.Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .ColorIndex = 3
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With rng.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .ColorIndex = 3
            .TintAndShade = 0
            .Weight = xlThin
        End With

    а как насчет «короткого» варианта — что в нем не так?



    0



    mobile

    Эксперт MS Access

    26777 / 14456 / 3192

    Регистрация: 28.04.2012

    Сообщений: 15,782

    12.02.2015, 13:08

    3

    Лучший ответ Сообщение было отмечено intersk как решение

    Решение

    В екселе пробую Ваш «короткий» вариант (чуть преобразованный, поскольку в екселе, а не из акса) и ставит все границы как требуется. В примере случайным образом выбрана строка 3

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    Public Sub make_border_1()
    ' задаем диапазон выбора ячеек и задаем им форматирование границ
    Dim Rowss2, rng As Range
    Rowss2 = 3
    Set rng = Range("B" & Rowss2, "F" & Rowss2)
    rng.HorizontalAlignment = xlRight 'xlCenter
     
    rng.Borders.Color = vbRed
     
    Set rng = Nothing
     
    End Sub

    Миниатюры

    Как установить границы ячейки Excel из VBA (Access)
     



    1



    114 / 4 / 0

    Регистрация: 07.09.2014

    Сообщений: 329

    12.02.2015, 14:00

     [ТС]

    4

    mobile, дело в том , что у меня есть разлинованный по ячейкам шаблон файла Excel. В него вношу значения. Но при вставке значений границы у некоторых ячеек стираются.
    Хотел таким кодом заново подрисовывать границы. Тестил на красном цвете — и красные границы появлялись только на месте стертых линий. То есть частично оставались черные границы, что и показано на моих скринах.
    Для работы изменил цвет границ на черный и код стал рабочим — потому что где границы пропадали там они и рисовались снова.
    Дело наверно в шаблоне файла… Но «длинный» вариант во всех случаях рисует границы. как бы замещает все линии, а не только те которые пропадали.
    Видимо разрушение границ происходит на стадии вставки новой строки… или еще чего-то…



    0



    Понравилась статья? Поделить с друзьями:
  • Vba excel выделенная область
  • Vba excel все форматы переменных
  • Vba excel все свойства ячейки
  • Vba excel все свойства кнопки
  • Vba excel все прописные