我正在尝试删除VBA中不完全空白的行。我说这个的原因是因为我无法应用完全空白的条件,就像我的第一列永远不会是空白而我想过滤第二列。
lastrow = sht.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
For i = 1 To Counter
If ActiveCell = "" Then
Selection.EntireRow.Delete
Counter = Counter - 1
Else
ActiveCell.Offset(1, 0).Select
End If
Next i
( Given Info ) Desired Result
Name ID Address Name ID Address
John NYC Jack 55 Chicago
Jack 55 Chicago Kate 65 Boston
Kate 65 Boston
Mike London
现在偏移将始终遍历到下一行,但如果行的第二列为空,如何删除整行。感谢。
答案 0 :(得分:3)
我会用这个。循环遍历A列中的每个单元格,从最高编号的行到单元格A1,如果B列中同一行中的单元格为空,则删除该列。
注意:我取出了Activate
和Select
。它们不是必需的,会降低您的代码速度。
Sub test()
Dim i As Integer
For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
If Range("b" & i) = "" Then
Range("b" & i).EntireRow.Delete
End If
Next i
End Sub
或者,你可以使用它:
Sub test2()
Dim blank_Bs As Range
On Error Resume Next
Set blank_Bs = Range("b1:b" & Range("a" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks)
If Not blank_Bs Is Nothing Then _
blank_Bs.EntireRow.Delete
On Error GoTo 0
End Sub
答案 1 :(得分:2)
.AutoFilter
只能显示要删除的行。
Sub nuke_Blank_Bs()
With ActiveSheet
With .Cells(1, 1).CurrentRegion
If .AutoFilter Then .AutoFilter
.AutoFilter Field:=2, Criteria1:="="
With .Offset(1, 0)
If CBool(Application.Subtotal(103, .Cells)) Then _
.EntireRow.Delete
End With
.AutoFilter
End With
End With
End Sub
这将过滤B列中的空白条目,并在找到条目时删除整个行。