Страницы: 1
RSS
Удаление строк, не содержащих данных в определенном диапазоне ячеек.
 
Добрый день!  
Из-за того, что начал изучать VBA я совсем недавно - пока пользуюсь плодами чужого труда, извращаясь и используя его в своих (в том числе и образовательных) целях. :)  
Задача. Удалить из таблицы строки, не содержащие данных в определенном диапазоне строк.  
Что я сделал.. Нашел макрос, который удаляет строки по условию в ячейке... Просуммировал (благо данные цифровые) данные в нужном диапазоне строки в дополнительном столбце и подмастрячил, чтобы макрос работал, опираясь на этот столбец.  
Все работает, но... есть большие сомнения в рациональности данного решения. :) Подскажите пожалуйста как вписать в макрос данное условие и обойтись без дополнительно столбца.  
Заранее благодарен.  
Пример - 34Кб.
 
так вы ячейки в макросе сложите(Cells(lngRow, 2)+Cells(lngRow, 3)+Cells(lngRow, 4))
Спасибо
 
Попробуйте так:  
Sub Delete_Rows()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
   For i = iLastRow To 2 Step -1  
       If Application.WorksheetFunction.CountA(Range(Cells(i, 2), Cells(i, 4))) = 0 Then Rows(i).Delete  
   Next  
End Sub
 
R Dmitry - Ваш способ работает. Спасибо.  
Юрий М - Ваш макрос, как я понял, лучше, тем что, если в диапазоне помимо числовых данных содержится и текст, то он работает и с ним. Этим Вы упредили вторую часть моего вопроса (как раз про текстовые данные). :)  
 
Но, я не могу понять, есть ли в VBA аналог фунции СУММ (Sum)?  
(прошу прощения за чайниковский вопрос)  
Не могу понять, почему у меня не желает работать вот это:  
 
Sub Delete_Rows1()  
Dim lngRow As Long  
lngRow = 2  
Do While Cells(lngRow, 1) <> ""  
   If Sum(Range(Cells(lngRow, 2), Cells(lngRow, 4))) = 0 Then  
       Call Rows(lngRow).Delete  
   Else  
   lngRow = lngRow + 1  
   End If  
Loop  
End Sub
 
Тоже функция рабочего листа:  
If Application.WorksheetFunction.Sum(Range...
 
Заработало! :)  
Так и знал, что не хватает мелочи какой-то..  
СПАСИБО!  
*пошел дальше читать умные книжки* :)
 
Palex,  
а вместо извращения с вызовом функций листа Ёкселя из VBA для суммирования типа:  
Application.WorksheetFunction.Sum(Range...  
вам не подходит ещё более простое решение - использовать для суммирования значений ячеек в  VBA обычный арифметический знак "плюс" точно также как его можно использовать вместо СУММ(...) на листе ?  
:-)
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Согласен с Алексом: на больших таблицах обращения к листу будут очень тормозить.
 
А можно глупый вопрос - где в коде указать параметр удаления строк в сумме 0
 
Ответ см. выше: 23.08.2010, 22:26
Страницы: 1
Читают тему
Наверх