【问题标题】:Deleting empty rows - MS Excel using VBA删除空行 - 使用 VBA 的 MS Excel
【发布时间】:2013-10-18 18:31:21
【问题描述】:

我正在使用以下 VBA 删除 T 列中没有 * 的所有行。它有效,但一次只删除 1 行。我必须运行 vba 25 次才能删除 T 列中没有 * 的 25 行。您发现代码有什么问题吗?

Sub DeleteCells()

    'Loop through cells A1:A10 and delete cells that contain an "x."
    For Each c In Range("t1:t35")
        If c <> "*" Then c.EntireRow.Delete
    Next

End Sub

【问题讨论】:

标签: vba excel excel-2010


【解决方案1】:

要删除行,您应该自下而上而不是自上而下:

Sub DeleteCells()
Dim i As Long

For i = 35 To 1 Step -1
    If Range("T" & i).Value <> "*" Then Range("T" & i).EntireRow.delete
Next i

End Sub

更有效的方法是使用自动过滤器并避免一起循环。比如:

Sub DeleteCellsFilter()
    Sheet1.Range("$T$1:$T$35").AutoFilter Field:=1, Criteria1:="<>*"
    Sheet1.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.delete
    Sheet1.UsedRange.AutoFilter
End Sub

这做了几个你应该纠正的假设:

1) 我们正在与 Sheet1 交互 2)您的范围是静态的(第 1 到 35 行)。

您应该适当调整这些假设。

【讨论】:

  • 有效。除了我改变 Range("T" & i).Value "*"
  • @torres 太好了,很高兴它为你解决了。随意尝试 Filter 方法,因为它更有效。无论哪种方式,如果您认为这是一个很好的可靠答案,请将其标记为“已接受”。祝你项目的其余部分好运!
  • + 1 用于自动过滤器 :)
猜你喜欢
  • 2020-03-22
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
相关资源
最近更新 更多