Есть два способа сделать так, чтобы Excel автоматически устанавливал границу после заполнения ячейки:
- При помощи условного форматирования.
- C помощью VBA.
Автоматическое добавление границы ячейки Excel с помощью условного форматирования
- Выделите область, в которую будут вводиться данные.
- На вкладке «Главная» нажмите «Условное форматирование».
- Выберите «Создать правило».
- В окне «Создание правила форматирования» выберите «Использовать формулу для определения форматируемых ячеек».
- В поле «Форматировать значение для которых следующая формула является истиной» введите следующую формулу: =$ячейка_с_которой_начинать<>"" (Например, =$B2<>"").
- Нажмите «Формат…».
- В окне «Формат ячеек» перейдите на вкладку «Граница».
- Выберите «Тип линии» и активируйте параметр «Внешние».
- Нажмите OK.
Теперь, когда вы будете вводить данные в ячейки того столбца, который указали в формуле, то для них автоматически будет устанавливаться граница.
Но такой способ имеет недостаток. Ведь вам нужно самостоятельно указывать диапазон таблицы и граница устанавливается только тогда, когда вводятся данные в ячейку из указанного в формуле столбца.
Автоматическое добавление границы ячейки Excel с помощью VBA
- Откройте Excel и нажмите Alt+F11, чтобы перейти в редактор Visual Basic for Applications (VBA).
- В редакторе VBA в окне Project Explorer выберите свой рабочий лист. Обычно он называется «Sheet1 (Лист1)» или что-то подобное.
- Дважды щёлкните имя листа, чтобы открыть его код. Или сделайте клик правой кнопкой мыши по «Sheet1 (Лист1)» и выберите «View Code».
- Вставьте код VBA в окно кода листа.
- Сохраните книгу Excel с поддержкой макросов.
Код VBA для автоматического добавления границы ячеек Excel
Private Sub Worksheet_Change(ByVal Target As Range)
' Проверяем, изменил ли пользователь значение в ячейке и не пуста ли ячейка
If Not Intersect(Target, Me.UsedRange) Is Nothing And Not IsEmpty(Target.Value) Then
' Проверяем, не находится ли ячейка в первой строке
If Target.Row > 1 Then
Dim startCell As Range
Dim endCell As Range
Dim cellAbove As Range
Dim rng As Range
Dim i As Integer
' Находим начальную ячейку группы (влево)
Set startCell = Target
For i = Target.Column To 1 Step -1
If Cells(Target.Row - 1, i).Borders(xlEdgeBottom).LineStyle <> xlNone Then
Set startCell = Cells(Target.Row, i)
Else
Exit For
End If
Next i
' Находим конечную ячейку группы (вправо)
Set endCell = Target
For i = Target.Column To Me.Columns.Count
If Cells(Target.Row - 1, i).Borders(xlEdgeBottom).LineStyle <> xlNone Then
Set endCell = Cells(Target.Row, i)
Else
Exit For
End If
Next i
' Проходим по всем ячейкам в определённом диапазоне
For Each rng In Me.Range(startCell, endCell).Cells
' Визначаємо комірку над поточною
Set cellAbove = rng.Offset(-1, 0)
' Если у ячейки над текущей есть нижняя граница, то копируем все границы
If cellAbove.Borders(xlEdgeBottom).LineStyle <> xlNone Then
rng.Borders(xlEdgeTop).LineStyle = cellAbove.Borders(xlEdgeTop).LineStyle
rng.Borders(xlEdgeTop).Color = cellAbove.Borders(xlEdgeTop).Color
rng.Borders(xlEdgeTop).Weight = cellAbove.Borders(xlEdgeTop).Weight
rng.Borders(xlEdgeBottom).LineStyle = cellAbove.Borders(xlEdgeBottom).LineStyle
rng.Borders(xlEdgeBottom).Color = cellAbove.Borders(xlEdgeBottom).Color
rng.Borders(xlEdgeBottom).Weight = cellAbove.Borders(xlEdgeBottom).Weight
rng.Borders(xlEdgeLeft).LineStyle = cellAbove.Borders(xlEdgeLeft).LineStyle
rng.Borders(xlEdgeLeft).Color = cellAbove.Borders(xlEdgeLeft).Color
rng.Borders(xlEdgeLeft).Weight = cellAbove.Borders(xlEdgeLeft).Weight
rng.Borders(xlEdgeRight).LineStyle = cellAbove.Borders(xlEdgeRight).LineStyle
rng.Borders(xlEdgeRight).Color = cellAbove.Borders(xlEdgeRight).Color
rng.Borders(xlEdgeRight).Weight = cellAbove.Borders(xlEdgeRight).Weight
End If
Next rng
End If
End If
End Sub
Примечание.
Данный код анализирует ячейки, которые находятся над той, в которую пользователь ввёл данные. Если ячейки над ней имеют границы (обязательно нижнюю), то тогда границы будут скопированы вниз.
То есть вам нужно сначала самостоятельно установить границы для нужного диапазона ячеек. И только после этого, когда вы будете вводить данные, эти границы будут самостоятельно проставляться для остальных ячеек (см. видео).
