【问题标题】:Excel VBA - Scan range and delete empty rows [duplicate]Excel VBA - 扫描范围并删除空行[重复]
【发布时间】:2013-10-23 17:33:11
【问题描述】:

我有一个电子表格,它根据数据透视表(通过 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 公式。

这是否可以通过某种方式实现?我希望我说得通。

谢谢。

【问题讨论】:

  • 您可以应用过滤器搜索“0”和“空”单元格。接下来,您可以删除整行。尝试使用宏记录器 - 可能这对你来说就足够了。

标签: excel excel-2013 vba


【解决方案1】:

例子

用代码

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

删除0s所以结果


使用通常比循环快一点的自动过滤器实现相同的结果

代码

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

结果

【讨论】:

  • 这解决了这个问题。我最终使用了自动过滤器选项。感谢您的详尽解释。
猜你喜欢
  • 2017-02-15
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
相关资源
最近更新 更多