Удаление пустых строк на рабочем листе

We use cookies. Read the Privacy and Cookie Policy

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

Листинг 3.52. Удаление пустых строк (вариант 1)

Sub DeleteEmptyStrings()

Dim intLastRow As Integer ' Номер последней используемой

строки

Dim intRow As Integer ' Номер проверяемой строки

' Получение номера последней используемой строки

intLastRow = Worksheets(ActiveSheet.Index).UsedRange.Row + _

Worksheets(ActiveSheet.Index).UsedRange.Rows.Count – 1

' Счетчик устанавливается на используемую первую строку

intRow = Worksheets(ActiveSheet.Index).UsedRange.Row

' Удаление пустых строк

Do While intRow <= intLastRow

If ActiveSheet.Rows(intRow).Text = "" Then

' Удаление строки

ActiveSheet.Rows(intRow).Delete

' Данные сдвинулись вверх, поэтому номер последней _

строки уменьшился, а текущей – не изменился

intLastRow = intLastRow – 1

Else

' Текущая строка заполнена – переходим к следующей

intRow = intRow + 1

End If

Loop

End Sub

При выполнении данной операции следует учитывать, что будут удалены только пустые строки, представляющие собой «пробелы». Например, если данные хранятся в строках с 1 по 10, но при этом строки 5 и 7 пустые, то после применения макроса строки 5 и 7 будут удалены и заменены следующими за ними строками с данными, а строки 11,12,13,14…. останутся на месте.

К аналогичному результату приведет также использование такого макроса (листинг 3.53). В данном случае удаление пустых строк происходит снизу вверх. Это позволяет упростить алгоритм, так как не нужно учитывать сдвиг данных вверх при удалении строк.

Листинг 3.53. Удаление пустых строк (вариант 2)

Sub DeleteEmptyStrings1()

Dim intRow As Integer

Dim intLastRow As Integer

' Получение номера последней используемой строки

intLastRow = ActiveSheet.UsedRange.Row + _

ActiveSheet.UsedRange.Rows.Count – 1

' Удаление пустых строк

For intRow = intLastRow To 1 Step -1

If ActiveSheet.Rows(intRow).Text = "" Then

ActiveSheet.Rows(intRow).Delete

End If

Next intRow

End Sub

Для удобства работы можно создать кнопку и привязать к ней какой-либо из приведенных макросов – тогда удаление пустых строк будет производиться при нажатии этой кнопки.