Удаление пустых строк с помощью кода VBA из всего задействованного диапазона рабочего листа Excel и из отдельного заданного диапазона.
Удаление пустых строк в используемом диапазоне
Рассмотрим удаление пустых строк из всего используемого диапазона на рабочем листе. Это может быть как таблица, так и любые наборы данных и произвольные записи, внутри которых присутствуют пустые строки, от которых надо избавиться.
Определить границы используемого диапазона на рабочем листе из кода VBA Excel нам поможет последняя ячейка используемого диапазона: Cells.SpecialCells(xlLastCell)
.
Самый простой код удаления пустых строк
Сначала определяем номер строки последней ячейки задействованного на рабочем листе диапазона. Затем, с этой строки начинаем построчный просмотр используемого диапазона снизу вверх с поиском и удалением пустых строк.
Пример кода VBA Excel для активного листа:
1 2 3 4 5 6 7 8 9 10 |
Sub Primer1() Dim n As Long, i As Long 'Определяем номер строки последней ячейки 'используемого диапазона на рабочем листе n = Cells.SpecialCells(xlLastCell).Row 'Ищем и удаляем пустые строки For i = n To 1 Step -1 If Rows(i).Text = "" Then Rows(i).Delete Next End Sub |
То же самое, но с указанием книги и рабочего листа:
1 2 3 4 5 6 7 8 9 |
Sub Primer2() Dim n As Long, i As Long With ThisWorkbook.Worksheets("Лист1") n = .Cells.SpecialCells(xlLastCell).Row For i = n To 1 Step -1 If .Rows(i).Text = "" Then .Rows(i).Delete Next End With End Sub |
Программа определения времени выполнения макроса показала, что этот код отработал в диапазоне из 3000 строк за 17,5 секунд.
Улучшенный код удаления пустых строк
Предыдущий код VBA Excel анализирует на наличие текста каждую строку по всей длине в пределах рабочего листа. Эта процедура проверяет каждую строку по длине только в переделах используемого диапазона:
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Primer3() Dim n As Long, i As Long, myRange As Range 'Присваиваем объектной переменной ссылку на диапазон от первой ячейки 'рабочего листа до последней ячейки используемого диапазона Set myRange = Range(Range("A1"), Cells.SpecialCells(xlLastCell)) With myRange n = .Rows.Count For i = n To 1 Step -1 If .Rows(i).Text = "" Then .Rows(i).Delete Next End With End Sub |
Программа определения времени выполнения макроса показала, что этот код отработал в диапазоне из 3000 строк за 13,3 секунды.
Удаление строк по пустым ячейкам
Иногда может появиться необходимость удалить не только полностью пустые строки, но и строки с пустыми ячейками в определенном столбце. Тогда следует действовать так:
1 2 3 4 5 6 7 |
Sub Primer4() Dim n As Long, i As Long n = Cells.SpecialCells(xlLastCell).Row For i = n To 1 Step -1 If Cells(i, 1).Text = "" Then Rows(i).Delete Next End Sub |
или так:
1 2 3 4 5 6 7 8 9 10 |
Sub Primer5() Dim n As Long, i As Long, myRange As Range Set myRange = Range(Range("A1"), Cells.SpecialCells(xlLastCell)) With myRange n = .Rows.Count For i = n To 1 Step -1 If .Cells(i, 1).Text = "" Then .Rows(i).Delete Next End With End Sub |
В этих примерах поиск пустой ячейки производится в первом столбце: Cells(i, 1)
.
Удаление пустых строк в заданном диапазоне
Процедуры VBA Excel для удаления пустых строк из заданного диапазона рассмотрим на примере объекта Selection
, который можно заменить на любой диапазон, указанный явно.
Удаление полностью пустых строк в пределах заданного диапазона:
1 2 3 4 5 6 7 8 9 |
Sub Primer6() Dim n As Long, i As Long With Selection n = .Rows.Count For i = n To 1 Step -1 If .Rows(i).Text = "" Then .Rows(i).Delete Next End With End Sub |
Удаление строк по пустым ячейкам в одном из столбцов:
1 2 3 4 5 6 7 8 9 |
Sub Primer7() Dim n As Long, i As Long With Selection n = .Rows.Count For i = n To 1 Step -1 If .Cells(i, 1).Text = "" Then .Rows(i).Delete Next End With End Sub |
Здравствуйте
Как удалить диапазон строк с переменным значением
f=4
n=12
какую прописать команду для удаления с 4-ой по 12-ую строку?
Rows(f:n).delete
Такой код машине не нравится
Добрый день!
спасибо