2014-10-03 41 views
-2

我有一个表,其中C列是从最大值到最小值的数值。如果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

你必须删除反向'行对于i = LASTROW 2步骤-1'所以它不跳过行。此外,你正在努力实现已经被回答。让我为你搜索链接 – 2014-10-03 09:06:41

+1

你可以使用[THIS](http://stackoverflow.com/questions/9379673/excel-vba-delete-empty-rows)方法。 – 2014-10-03 09:10:21

回答

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 2014-10-03 09:20:29