Макрос для объединения повторяющихся ячеек в таблице Excel

В данном практическом примере мы напишем и пошагово разберем принцип действия VBA кода макроса для автоматического объединения повторяющихся ячеек в таблице.

Как объединить все повторяющиеся ячейки в строке

У нас иметься квартальный отчет, сформированный по отделам, как показано ниже на рисунке:

Квартальный отчет.

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

Откройте редактор Visual Basic (ALT+F11):

Visual Basic.

Создайте новый модуль с помощью инструмента: «Insert»-«Module». А потом введите в него следующий VBA-код:

Код в модуле.
Sub MergeDoubles()
Dim i As Long
Application.DisplayAlerts = False
For i = Selection.Columns.Count To 2 Step -1
  If Selection.Cells(1, i) = Selection.Cells(1, i - 1) Then
  Range(Selection.Cells(1, i - 1), Selection.Cells(1, i)).Merge
  End If
Next
Selection.HorizontalAlignment = xlHAlignCenter
Application.DisplayAlerts = True
End Sub

Теперь если нам нужно объединить одинаковые ячейки в строке по горизонтали, выделите диапазон ячеек B1:L1 и запустите макрос. А для этого выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«MergeDoubles»-«Выполнить». В результате должен получиться эффект такой же как на рисунке:

Пример.

В начале кода мы декларируем переменную, которая играет роль счетчика в цикле. С помощью этого же цикла мы проверяем значения всех соседних ячеек в выделенном диапазоне справа на лево. Если ячейка содержит такое же значение, как и соседняя, тогда они объединяться. В начале выполнения макроса отключаем предупреждающее сообщение, которое по умолчанию возникает при попытке объединить непустые ячейки в программе Excel. Для этого мы вызываем объект «DisplayAlerts» и просто меняем его свойство на значение «False». В конце кода не забудем поменять значение в это же свойство на «True», чтобы снова включить действе объекта «DisplayAlerts», как и должно быть по умолчанию в программе Excel.

Так же мы еще воспользуемся объектом HorizontalAlignment, чтобы выровнять текст в объединенных ячейках по центру устанавливаем ему свойство xlHAlignCenter.

Обратите внимание на то, что наш макрос пока еще не умеет работать более чем с одной строкой. Сколько строк не выделяй он все равно объединяет повторяющиеся значения только в первой строке.

Как объединить все повторяющиеся ячейки одновременно

Если данный макрос должен уметь работать сразу с несколькими выделенными строками одновременно, тогда усовершенствуем его изменив и настроив код. В начале кода добавим декларацию для новой переменной j:

Dim j As Long

Далее нам необходимо создать новый цикл, который должен срабатывать еще до выполнения старого цикла. Так выглядит строка кода для нового цикла, которую следует добавить выше уже имеющегося цикла:

For j = 1 To Selection.Rows.Count

После инструкции конца первого цикла добавляем новую строку с инструкцией конца для второго:

Next

Далее во всех экземплярах объекта Cells указываем в аргументе в место числа 1 переменную j. Например, Selection.Cells(i, j). Полная версия усовершенствованного кода макроса выглядит так:

Sub MergeDoubles()
Dim i As Long
Dim j As Long
Application.DisplayAlerts = False
For j = 1 To Selection.Rows.Count
  For i = Selection.Columns.Count To 2 Step -1
    If Selection.Cells(j, i) = Selection.Cells(j, i - 1) Then
    Range(Selection.Cells(j, i - 1), Selection.Cells(j, i)).Merge
    End If
  Next
Next
Selection.HorizontalAlignment = xlHAlignCenter
Application.DisplayAlerts = True
End Sub

А теперь выделите диапазон B1:L12 и запустите макрос с уже новой версией кода:

Объединение повторяющихся ячеек.

Читайте также: как объединить повторяющиеся ячейки в столбце.

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