Макрос для объединения пустых ячеек в строках таблицы 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
Теперь если нам нужно одновременно объединять диапазоны кварталов, чтобы избавиться от пустых ячеек, выделите диапазон B1:L2. После чего запустите макрос: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«JoinEmpty»-«Выполнить». Ячейки объединяться в соответствии с продолжительностью каждого квартала, как на рисунке:
В данном коде цикл проходит по всем ячейкам первой строки выделенного диапазона, слева на право. Проверяется каждая из них на наличие значений. Если проверяемая ячейка не содержит никаких значений (пуста), макрос объединяет ее с предыдущей ячейкой. А если же проверяемая ячейка содержит какое-то значение, то макрос пропускает ее и переходит к проверке следующей.
В конце кода выравниваем по центру весь текст, который содержится в выделенном диапазоне задав соответствующее свойство в строке:
Selection.HorizontalAlignment = xlHAlignCenter
Обратите внимание, что в этой версии кода если мы выделим более одной строки содержащие пустые ячейки, то после запуска макроса будут объединены ячейки только в первой строке. Далее рассмотрим, как модифицировать наш макрос, чтобы он был применим одновременно для нескольких выделенных строк.
Как объединить все пустые ячейки во всех строках таблицы Excel
Что если в нашей таблице потребуется выполнить аналогичное объединение пустых ячеек сразу в нескольких строках – одновременно? Для этого нужно добавить несколько строк в код нашего макроса. Но сначала подготовим исходную таблицу.
Допустим нам для последних трех отделов необходимо разбить данные на 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
Внимание! Если первая ячейка (в верхнем левом углу) выделенного диапазона – пуста, то она будет объедена со смежной ячейкой слева от выделенного диапазона.