Excel VBA - 扫描范围并删除空行

时间:2013-10-23 09:08:08

标签: excel-vba excel-2013 vba excel

我有一个电子表格,根据数据透视表(通过ODBC导入)中的数据填充行。我正在使用VLOOKUP,例如:

=VLOOKUP(A8;Data!B1:I298;2;FALSE)

结果类似于

Name1
Name2
Address1
Address2
Postalcode
Country

可能会发生一些枢轴列为空,导致

Name1
0
Address1
0
Postalcode
0

我需要的是某种循环一系列行的函数,例如A8 - A14并删除“空”的行。我的问题是行不是真正的空,它们仍然返回0并包含VLOOKUP公式。

这可以以某种方式实现吗?我希望我有意义。

感谢。

1 个答案:

答案 0 :(得分:3)

实施例

enter image description here

代码

Sub Delete0s()
    Dim i As Long
    For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
        If Range("A" & i) = 0 Then
            Range("A" & i).Delete shift:=xlUp
        End If
    Next i
End Sub

删除0,所以结果

enter image description here


使用autofilter实现相同的结果,通常比循环快一点

enter image description here

Sub Delete0s()
    Dim ws As Worksheet
    Dim rng As Range
    Dim lastRow As Long

    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

    Set rng = ws.Range("A1:A" & lastRow)
    With rng
        .AutoFilter Field:=1, Criteria1:="=0"
        .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With

    ws.AutoFilterMode = False
End Sub

结果

enter image description here