Объединение диапазона ячеек в одну или построчно с помощью кода VBA Excel. Метод Range.Merge и свойство MergeCells. Отмена объединения ячеек. Примеры.
Метод Range.Merge
Метод Merge объекта Range объединяет ячейки заданного диапазона в одну или построчно из кода VBA Excel.
Синтаксис метода:
1 |
Expression.Merge(Across) |
- Expression — выражение, возвращающее объект Range.
- Across — логическое значение, определяющее характер объединения ячеек:
- True — ячейки объединяются построчно: каждая строка заданного диапазона преобразуется в одну ячейку.
- False — весь диапазон преобразуется в одну ячейку. False является значением по умолчанию.
Преимущество метода Range.Merge перед свойством MergeCells заключается в возможности построчного объединения ячеек заданного диапазона без использования цикла.
Свойство MergeCells
Свойство MergeCells объекта Range применяется как для объединения ячеек, так и для его отмены.
Синтаксис свойства с присвоением значения:
1 |
Expression.MergeCells = Boolean |
- Expression — выражение, представляющее объект Range.
- Boolean — логическое значение, определяющее необходимость объединения ячеек или его отмены:
- True — объединение ячеек заданного диапазона.
- False — отмена объединения ячеек.
С помощью свойства MergeCells можно из кода VBA Excel проверять диапазон (отдельную ячейку), входит ли он (она) в объединенную ячейку (True) или нет (False). Если проверяемый диапазон окажется комбинированным, то есть содержащим объединенные и необъединенные ячейки, компилятор сгенерирует ошибку.
Переменная Expression для отмены объединения ячеек с помощью свойства Range.MergeCells может представлять одну любую ячейку, входящую в объединенный диапазон.
Метод Range.UnMerge
Метод UnMerge объекта Range разделяет объединенную область на отдельные ячейки из кода VBA Excel.
Синтаксис метода:
1 |
Expression.UnMerge |
Expression — выражение, возвращающее объект Range.
Переменная Expression для отмены объединения ячеек методом UnMerge может представлять одну любую ячейку, входящую в объединенный диапазон.
Примеры объединения ячеек и его отмены
Пример 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
Отмена объединения ячеек с помощью метода Range.UnMerge:
1 2 3 4 5 6 7 8 9 10 |
Sub Primer4() 'Объединяем ячейки диапазона "A1:C4" Range("A1:C4").Merge MsgBox "Ячейки диапазона ""A1:C4"" объединены" 'Смотрим адрес диапазона, входящего в объединенную ячейку MsgBox Range("A2").MergeArea.Address 'Отменяем объединение ячеек диапазона "A1:C4" Range("B3").UnMerge 'или: Range("B3").MergeArea.UnMerge MsgBox "Объединение ячеек диапазона ""A1:C4"" отменено" End Sub |
Предупреждение перед объединением
Если объединяемые ячейки не являются пустыми, пред их объединением появится предупреждающее диалоговое окно с сообщением: «В объединенной ячейке сохраняется только значение из верхней левой ячейки диапазона. Остальные значения будут потеряны.»
Пример 5
Наблюдаем появление предупреждающего окна:
1 2 3 4 5 6 7 8 9 |
Sub Primer5() 'Отменяем объединение ячеек в диапазоне "A1:D4" Range("A1:D4").MergeCells = 0 'Заполняем ячейки диапазона текстом Range("A1:D4") = "Ячейка не пустая" 'Объединяем ячейки диапазона "A1:D4" Range("A1:D4").MergeCells = 1 'Наблюдаем предупреждающее диалоговое окно End Sub |
Чтобы избежать появление предупреждающего окна, следует использовать свойство Application.DisplayAlerts, с помощью которого можно отказаться от показа диалоговых окон при работе кода VBA Excel.
Пример 6
1 2 3 4 5 6 7 8 9 |
Sub Primer6() 'Отменяем объединение ячеек в диапазоне "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 предупреждающее окно не показывается, это не означает, что оно игнорируется. Просто программа самостоятельно принимает к действию ответное значение диалогового окна по умолчанию.
Здравствуйте.
Подскажите пожалуйста. Имеется ли возможность в VBA диапазон указывать не адресно а формулой. Сослаться на одну ячейку получилось, а вот на диапазон никак. Как дополнить код ниже, чтобы программа начала воспринимать переменную Х как начало диапазона?
Sub Merge()
Dim i As Long
Dim x As String
i = 4
x = a4
If Range("a" & i).Text = "" Then
MsgBox "Заполните ячейку!"
Else
Range("x:a5").Merge
End If
End Sub
Здравствуйте, Семен!
Выражение с переменной записывается немного по-другому:
Спасибо за ответ. Но, к сожалению, не работает получившийся код. Ругается на эту строку всё равно. Может переменная Х должна быть не строкой а чем-то другим?
Sub Merge()
Dim i As Long
Dim x As String
i = 4
x = a4
If Range("a" & i).Text = "" Then
MsgBox "Заполните ячейку!"
Else
Range(x & ":a5").Merge
End If
End Sub
Я проверял именно на вашем коде. Ячейки a4 и a5 объединились в одну ячейку. Да,
x = "a4"
в кавычках.Искренне благодарю Вас! Заработало после добавления кавычек.
Обсуждение закрыто.