Перейти к содержимому

VBA Excel. Объединение ячеек и его отмена

Объединение диапазона ячеек в одну или построчно с помощью кода VBA Excel. Метод Range.Merge и свойство MergeCells. Отмена объединения ячеек. Примеры.

  1. Метод Range.Merge
  2. Свойство MergeCells объекта Range
  3. Примеры объединения ячеек и его отмены
  4. Предупреждение перед объединением

Метод Range.Merge

Метод Merge объекта Range объединяет ячейки заданного диапазона в одну или построчно из кода VBA Excel.

Синтаксис метода:

Expression.Merge(Across)

  1. Expression - выражение, возвращающее объект Range.
  2. Across - логическое значение, определяющее характер объединения ячеек:
    • True - ячейки объединяются построчно: каждая строка заданного диапазона преобразуется в одну ячейку.
    • False - весь диапазон преобразуется в одну ячейку. False является значением по умолчанию.

Преимущество метода Range.Merge перед свойством MergeCells заключается в возможности построчного объединения ячеек заданного диапазона без использования цикла.

Свойство MergeCells

Свойство MergeCells объекта Range применяется как для объединения ячеек, так и для его отмены.

Синтаксис свойства с присвоением значения:

Expression.MergeCells = Boolean

  1. Expression - выражение, возвращающее объект Range.
  2. Boolean - логическое значение, определяющее необходимость объединения ячеек или его отмены:
    • True - объединение ячеек заданного диапазона.
    • False - отмена объединения ячеек.

С помощью свойства MergeCells можно из кода VBA Excel проверять диапазон (отдельную ячейку), входит ли он (она) в объединенную ячейку (True) или нет (False). Если проверяемый диапазон окажется комбинированным, то есть содержащим объединенные и необъединенные ячейки, компилятор сгенерирует ошибку.

Примеры объединения ячеек и его отмены

Пример 1
Наблюдаем, как происходит объединение ячеек при разных значениях параметра Across:

Sub Primer1()
'Объединяем ячейки диапазона "A1:D4" построчно
   Range("A1:D4").Merge (True)
'Объединяем диапазон "A5:D8" в одну ячейку
'Across принимает значение False по умолчанию
   Range("A5:D8").Merge
End Sub

Не забываем, что логическое выражение True можно заменить единичкой, а False - нулем.

Range("A1:D4").Merge (1)

Пример 2
Отменяем объединение ячеек в диапазонах из первого примера:

Sub Primer2()
   Range("A1:D8").MergeCells = False
End Sub

Пример 3
Предполагается, что перед этим примером отменено объединение ячеек кодом из предыдущего примера.

Sub Primer3()
'Объединяем ячейки диапазона "A1:D4"
   Range("A1:D4").MergeCells = 1
'Проверяем принадлежность диапазона
'объединенной ячейке*
   MsgBox Range("A1:C2").MergeCells
   MsgBox Range("A6:C7").MergeCells
'Ячейки диапазона "A5:D8"
'можно объединить и так
   Cells(5, 1).Resize(4, 4).Merge
End Sub

*Если проверяемый диапазон окажется комбинированным, VBA Excel сгенерирует ошибку.

Предупреждение перед объединением

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

Пример 4
Наблюдаем появление предупреждающего окна:

Sub Primer4()
'Отменяем объединение ячеек в диапазоне "A1:D4"
   Range("A1:D4").MergeCells = 0
'Заполняем ячейки диапазона текстом
   Range("A1:D4") = "Ячейка не пустая"
'Объединяем ячейки диапазона "A1:D4"
   Range("A1:D4").MergeCells = 1
'Наблюдаем предупреждающее диалоговое окно
End Sub

Предупреждающее окно перед объединением ячеек

Чтобы избежать появление предупреждающего окна, следует использовать свойство Application.DisplayAlerts, с помощью которого можно отказаться от показа диалоговых окон при работе кода VBA Excel.

Пример 5

Sub Primer5()
'Отменяем объединение ячеек в диапазоне "A5:D8"
   Range("A5:D8").MergeCells = 0
'Заполняем ячейки диапазона "A5:D8" текстом
   Range("A5:D8") = "Ячейка не пустая"
Application.DisplayAlerts = False
   Range("A5:D8").MergeCells = 1
Application.DisplayAlerts = True
End Sub

Теперь все прошло без появления диалогового окна. Главное, не забывать после объединения ячеек возвращать свойству Application.DisplayAlerts значение True.

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

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

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