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