Объединение диапазона ячеек в одну или построчно с помощью кода VBA Excel. Метод Range.Merge и свойство MergeCells. Отмена объединения ячеек. Примеры.
Метод Range.Merge
Метод Merge объекта Range объединяет ячейки заданного диапазона в одну или построчно из кода VBA Excel.
Синтаксис метода:
Expression.Merge(Across)
- Expression – выражение, возвращающее объект Range.
- Across – логическое значение, определяющее характер объединения ячеек:
- True – ячейки объединяются построчно: каждая строка заданного диапазона преобразуется в одну ячейку.
- False – весь диапазон преобразуется в одну ячейку. False является значением по умолчанию.
Преимущество метода Range.Merge перед свойством MergeCells заключается в возможности построчного объединения ячеек заданного диапазона без использования цикла.
Свойство MergeCells
Свойство MergeCells объекта Range применяется как для объединения ячеек, так и для его отмены.
Синтаксис свойства с присвоением значения:
Expression.MergeCells = Boolean
- Expression – выражение, возвращающее объект Range.
- Boolean – логическое значение, определяющее необходимость объединения ячеек или его отмены:
- True – объединение ячеек заданного диапазона.
- False – отмена объединения ячеек.
С помощью свойства MergeCells можно из кода VBA Excel проверять диапазон (отдельную ячейку), входит ли он (она) в объединенную ячейку (True) или нет (False). Если проверяемый диапазон окажется комбинированным, то есть содержащим объединенные и необъединенные ячейки, компилятор сгенерирует ошибку.
Примеры объединения ячеек и его отмены
Пример 1
Наблюдаем, как происходит объединение ячеек при разных значениях параметра Across:
1 2 3 4 5 6 7 |
Sub Primer1() 'Объединяем ячейки диапазона "A1:D4" построчно Range("A1:D4").Merge (True) 'Объединяем диапазон "A5:D8" в одну ячейку 'Across принимает значение False по умолчанию Range("A5:D8").Merge End Sub |
Не забываем, что логическое выражение True можно заменить единичкой, а False – нулем.
1 |
Range("A1:D4").Merge (1) |
Пример 2
Отменяем объединение ячеек в диапазонах из первого примера:
1 2 3 |
Sub Primer2() Range("A1:D8").MergeCells = False End Sub |
Пример 3
Предполагается, что перед этим примером отменено объединение ячеек кодом из предыдущего примера.
1 2 3 4 5 6 7 8 9 10 11 |
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
Наблюдаем появление предупреждающего окна:
1 2 3 4 5 6 7 8 9 |
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
1 2 3 4 5 6 7 8 9 |
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 предупреждающее окно не показывается, это не означает, что оно игнорируется. Просто программа самостоятельно принимает к действию ответное значение диалогового окна по умолчанию.