2014-10-03 2 views
-2

У меня есть таблица, где в столбце C указаны числовые значения, отсортированные от max до min. Если значения столбца C> 40, макрос удаляет всю строку таблицы. Я использую следующий макрос:Как удалить строки на основе условия в VBA?

Sub DeleteRowsPiuDi40Mega() 
Dim LastRow As Long 
Dim ws4 As Worksheet 
Set ws4 = ActiveWorkbook.Sheets("atm_hh") 
LastRow = ActiveSheet.Range("C" & ActiveSheet.Rows.Count).End(xlUp).Row 
For i = 2 To LastRow 
If Cells(i, 3) > 40 Then Rows(i & ":" & i).EntireRow.Delete 
Next i 
End Sub 

Проблема в том, что после удаления некоторых строк он останавливается, оставляя в колонке C некоторые значения, которые> 40. Что может быть не так с этим кодом?

+3

Вы должны удалить строки в обратном 'Для я = LastRow 2 Шаг -1' так, чтобы она не пропустить строки. На то, что вы пытаетесь достичь, уже ответили. Позвольте мне найти ссылку для вас –

+1

Вы можете использовать метод [ЭТО] (http://stackoverflow.com/questions/9379673/excel-vba-delete-empty-rows). –

ответ

0

Проблема в том, что после того, как строка была удалена, макрос продолжит переход к следующей строке (пропуская строку).

Работа в обратном направлении через петлю предотвратит любые строки пропускаются так что-то вроде:

Sub DeleteRowsPiuDi40Mega() 

Dim LastRow As Long 
Dim ws4 As Worksheet 

Set ws4 = ActiveWorkbook.Sheets("atm_hh") 
LastRow = ActiveSheet.Range("C" & ActiveSheet.Rows.Count).End(xlUp).Row 

For i = LastRow to 2 Step -1 
    If Cells(i, 3) > 40 Then Rows(i & ":" & i).EntireRow.Delete 
Next i 

End Sub 
+0

Большое спасибо, он работает сейчас. – Ale

Смежные вопросы