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

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

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

У нас иметься таблица бюджета для разных отделов. Суммы распределены по месяцам. Итоговые суммы по каждому отделу взяты из других листов рабочей книги Excel, где указаны по ним данные на все месяца текущего года. Поэтому автор общей таблицы бюджета распределил названия заголовков не только по месяцам, а и по кварталам. Соответственно название квартала находиться в столбце первого месяца с которого начинается этот же квартал. За исключением первого квартала так как год уже не полный по состоянию на дату формирования отчета. Как показано ниже на рисунке:

Бюджет по отделам.

Формат бюджета для ежемесячных показателей с распределением по кварталам.

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

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

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

редактор макросов.

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

Sub JoinEmpty()
Dim i As Long
For i = 1 To Selection.Columns.Count
  If Selection.Cells(1, i) = "" Then
  ActiveSheet.Range(Selection.Cells(1, i - 1), Selection.Cells(1, i)).Merge
  End If
Next
Selection.HorizontalAlignment = xlVAlignCenter
End Sub
Код JoinEmpty.

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

Пример.

В данном коде цикл проходит по всем ячейкам первой строки выделенного диапазона, слева на право. Проверяется каждая из них на наличие значений. Если проверяемая ячейка не содержит никаких значений (пуста), макрос объединяет ее с предыдущей ячейкой. А если же проверяемая ячейка содержит какое-то значение, то макрос пропускает ее и переходит к проверке следующей.

В конце кода выравниваем по центру весь текст, который содержится в выделенном диапазоне задав соответствующее свойство в строке:

Selection.HorizontalAlignment = xlHAlignCenter

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

Как объединить все пустые ячейки во всех строках таблицы Excel

Что если в нашей таблице потребуется выполнить аналогичное объединение пустых ячеек сразу в нескольких строках – одновременно? Для этого нужно добавить несколько строк в код нашего макроса. Но сначала подготовим исходную таблицу.

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

Исходный бюджет 2.

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

Dim j As Long

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

For j = 1 To Selection.Rows.Count

Так же не забудем добавить конец нового цикла:

Next

Во всех экземплярах объекта Cells, для второго аргумента вместо числа 1 введем переменную j:

Selection.Cells(i,j)

Полная версия модифицированного кода макроса:

Sub JoinEmpty()
Dim i As Long
Dim j As Long
For j = 1 To Selection.Rows.Count
  For i = 1 To Selection.Columns.Count
    If Selection.Cells(j, i) = "" Then
    ActiveSheet.Range(Selection.Cells(j, i - 1), Selection.Cells(j, i)).Merge
    End If
  Next
Next
Selection.HorizontalAlignment = xlVAlignCenter
End Sub

Теперь, нам осталось только лишь выделить диапазон B1:L12 и запустить новую версию макроса:

Все пустые ячейки объеденены.

Читайте также: макрос для объединения пустых ячеек в столбцах таблицы Excel

Внимание! Если первая ячейка (в верхнем левом углу) выделенного диапазона – пуста, то она будет объедена со смежной ячейкой слева от выделенного диапазона.