如果单元格为空,VBA删除行



我有一个宏,它从数据集中过滤和删除不必要的数据,并创建一个数据透视表。过滤和删除数据的代码如下:

For i = 2 To LastRowG
If Range("G" & i).Value = "APGCVGP" Then
lo.Range.autofilter Field:=7, Criteria1:="APGCVGP"

Application.DisplayAlerts = False
lo.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True

lo.autofilter.ShowAllData
Else
End If
Next i

如何使用此格式删除某列中具有空白单元格的行?

我尝试了以下操作,但没有任何反应:

For i = 2 To LastRowG
If Range("G" & i).Value = "=" Then
lo.Range.autofilter Field:=7, Criteria1:="="

Application.DisplayAlerts = False
lo.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = False

lo.autofilter.ShowAllData
Else
End If
Next i

我已经尝试了相同的代码,但使用"<>"而不是"=",但也没有做任何事情。

比起第一个过程中的循环,您能不能像这样避免它呢?

If WorksheetFunction.CountIf(Range("G:G"),"APGCVGP") Then
lo.Range.autofilter Field:=7, Criteria1:="APGCVGP"
Application.DisplayAlerts = False
lo.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
lo.autofilter.ShowAllData
End If

对于第二个程序,您将使用

测试空白。
If Range("G" & i).Value = "" Then

但是,我认为你不需要一个循环,也就是说,如果G2是空白的,那么你将删除所有空白单元格,但是,在循环的下一次迭代中,如果G3也是空白的,你将试图再次删除你已经删除的单元格……在任何情况下,您都不需要过滤器来识别空白,例如

lo.DataBodyRange.Columns(7).SpecialCells(xlCellTypeBlanks).Rows.Delete

如果您只是想删除基于列g中的值为空白或等于"的整行,那么这应该工作。请注意,在末尾删除行要比在循环时删除行要有效得多。

在运行任何代码之前小心保存你的工作,因为我们无法看到你真正在做什么。

Sub deleteSomeRows()
Dim i As Long, killRange As Range, aCell As Range


For i = 2 To LastRowG
Set aCell = Range("G" & i)

If aCell.Value = "" Then
If killRange Is Nothing Then
Set killRange = aCell.EntireRow
Else
Set killRange = Union(killRange, aCell.EntireRow)
End If
End If

Next i

If Not killRange Is Nothing Then
killRange.ClearContents
killRange.Delete (xlUp)
End If
End Sub

最新更新