Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

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

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

    Метод Range.Merge

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

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

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

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

    Свойство MergeCells

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

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

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

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

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

    Метод Range.UnMerge

    Метод UnMerge объекта Range разделяет объединенную область на отдельные ячейки из кода VBA Excel.

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

    Expression — выражение, возвращающее объект Range.

    Переменная Expression для отмены объединения ячеек методом UnMerge может представлять одну любую ячейку, входящую в объединенный диапазон.

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

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

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

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

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

    *Если проверяемый диапазон окажется комбинированным, VBA Excel сгенерирует ошибку.
    Пример 4
    Отмена объединения ячеек с помощью метода Range.UnMerge:

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

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

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

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

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

    Пример 6

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

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

    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    5 комментариев для “VBA Excel. Объединение ячеек и его отмена”

    1. Здравствуйте.
      Подскажите пожалуйста. Имеется ли возможность в 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

      1. Евгений

        Здравствуйте, Семен!
        Выражение с переменной записывается немного по-другому:

        1. Спасибо за ответ. Но, к сожалению, не работает получившийся код. Ругается на эту строку всё равно. Может переменная Х должна быть не строкой а чем-то другим?
          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

          1. Евгений

            Я проверял именно на вашем коде. Ячейки a4 и a5 объединились в одну ячейку. Да, x = "a4" в кавычках.

            1. Искренне благодарю Вас! Заработало после добавления кавычек.

    Обсуждение закрыто.