Страница 1 из 1
Удалить все пустые строки
Добавлено: 04 сен 2006, 15:18
namomelkor
Нужно удалить все пустые строки в листе:
текст
пустая строка
пустая строка
текст
текст
текст
пустая строка
еще нужно удалить те строки в которіх есть определенная подстрока.
Добавлено: 04 сен 2006, 16:14
pashulka
Ну удалить все пустые строки Вам вряд ли удастся, например, в новом рабочем листе (MS Excel 97-2003) наличествует 65536 пустых строк и их удаление не приведёт к их исчезновению :P Что касается пустых строк (именно строк), то для их удаления в используемом диапазоне Вы можете использовать любой из двух нижеопубликованных вариантов :
Код: Выделить всё
Dim iRange As Range, iRangeDelete As Range
For Each iRange In Worksheets(1).UsedRange.Rows
If iRange.Text = "" Then
Set iRangeDelete = Union(iRange, _
IIf(iRangeDelete Is Nothing, iRange, iRangeDelete))
End If
Next
If Not iRangeDelete Is Nothing Then iRangeDelete.EntireRow.Delete
Код: Выделить всё
Dim iRange As Range, iRangeDelete As Range
For Each iRange In Worksheets(1).UsedRange.Rows
If Application.CountA(iRange) = 0 Then
Set iRangeDelete = Union(iRange, _
IIf(iRangeDelete Is Nothing, iRange, iRangeDelete))
End If
Next
If Not iRangeDelete Is Nothing Then iRangeDelete.EntireRow.Delete
При необходимости цикл можно всегда организовать начиная с первой строки и добавить всевозможные Application. … = False/True, а для поиска нужного значения в ячейках с последующим удалением найденных строк можно использовать метод .Find об'екта Range
Добавлено: 04 сен 2006, 16:37
Diment
если в таблице только один столбец...
Sub вариант1()
Range("A1").Activate 'верхняя точка "прогоняемого" столбца
For i = 1 To 1000 '1000 - ориентировочное количество строк в твоей таблице
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
If ActiveCell.Value = "" Or ActiveCell.Value = "..." Then
Selection.EntireRow.Delete
End If
Next
End Sub
если несколько столбцов, но удаляются строки на основании данных только одного из них
Sub вариант2()
Selection.AutoFilter Field:=1, Criteria1:="", Operator:=xlOr _
, Criteria2:="=..." 'фильтрация столбца с заданым порядковаым номером
Range(Rows("2:2"), Rows("2:2").End(xlDown)).Delete Shift:=xlUp
Selection.AutoFilter Field:=1
End Sub
и не забывай перед процедурой отключать автоматический перерасчет и обновление экрана (для быстроты процесса)
Добавлено: 04 сен 2006, 17:37
pashulka
Даже если таблица будет содержать всего один столбец, то первый вариант не будет корректно обрабатывать нужный диапазон, и за примером далеко идти не нужно, достаточно взять образец "таблицы", который предоставил автор вопроса. И если уж говорить о рабочем варианте подобного макроса, то цикл нужно, либо осуществить с обратным отсчётом, т.е. с последней строки по первую, либо изменять счёт(чик) после удаления. Что касается .Activate и .Select, то в таких случаях о них нужно забыть раз и навсегда.
Добавлено: 04 сен 2006, 17:47
namomelkor
С пустыми уже понятно работает спасибо pashulka,
а вот с тем чтобы удалять строку в которой находится подстрока пока ничего не понял
Добавлено: 04 сен 2006, 18:17
Diment
Pashulka, можно короткий пример, как избежать .select и .activate
Добавлено: 04 сен 2006, 19:42
pashulka
Namomelkor, Посмотрите небольшой
пример, возможно он окажется Вам полезен ...
Diment, Ну если короткий, то конечно же можно.
Код: Выделить всё
With ThisWorkbook.Worksheets(1)
For iRow& = 100 To 1 Step -1
If IsEmpty(.Cells(iRow&, "A").Value) = True Then .Rows(iRow&).Delete
'ячейка содержащая пробел(ы) не является пустой.
'но если ячейку с пробелами нужно идентифицировать как пустую ячейку, то
'If Trim(CStr(.Cells(iRow&, 1))) = "" Then .Rows(iRow&).Delete
Next
End With
Добавлено: 05 сен 2006, 11:00
Diment
Pashulka, спасибо постараюсь ипользовать такой вариант в своей работе
Re: Удалить все пустые строки
Добавлено: 27 сен 2009, 15:53
vv66
pashulka писал(а):Namomelkor, Посмотрите небольшой
пример, возможно он окажется Вам полезен ...
Diment, Ну если короткий, то конечно же можно.
Код: Выделить всё
With ThisWorkbook.Worksheets(1)
For iRow& = 100 To 1 Step -1
If IsEmpty(.Cells(iRow&, "A").Value) = True Then .Rows(iRow&).Delete
'ячейка содержащая пробел(ы) не является пустой.
'но если ячейку с пробелами нужно идентифицировать как пустую ячейку, то
'If Trim(CStr(.Cells(iRow&, 1))) = "" Then .Rows(iRow&).Delete
Next
End With
Прошу прощения, уважаемый, а как быть в случае, когда в ячейке записана строка с нулевой длинной? Я столкнулся с такой проблемой: когда в ячейке была формула =ЕСЛИ(.........) и после действий копировать/вставить значения там вроде бы было пусто, но макрос по удалению пустых строк, как говорится, проходил мимо. Как быть?..
