【问题标题】:Do Until Nothing Found做直到什么都没找到
【发布时间】:2020-12-29 12:36:03
【问题描述】:

我正在研究一个宏来查看股票数据。如果在给定日期没有可用数据,则数据在这些行中显示“-”。我需要删除这些行。 我想出了一个删除找到的第一行的宏。我需要继续执行,直到所有带有“-”的行都被删除。

如何使用 Do Until 循环来做到这一点?

Sub removejank()
'
' removejank Macro
    Cells.Find(What:="-", After:=ActiveCell, LookIn:=xlFormulas2, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
        
    If ActiveCell.Value = "-" Then
        Rows(ActiveCell.Row).Delete
    End If        
End Sub

【问题讨论】:

  • 包含- 的单元格的格式是什么? IOW,这是一个实际的文本 - 还是输入 0 将显示为 - 的会计或货币格式的结果?
  • 这些单元格在哪一列?编辑:我看到它似乎基本上是整行数据。因此,例如,如果您仅查看 A 列,就足够了吗? (我们可以搜索所有列,但限制为 1 可能会加快您的代码速度)。
  • “-”是实际文本,后面没有公式或计算。数据的结构为具有特定股票的日期、开盘价、最高价、最低价、收盘价、成交量的单独列。如果缺少任何信息,则 B 到 G 列都将包含这个“-”符号。所以是的,如果我们只检查从 B 到 G 的任何奇异列,就足以确定该行应该被删除。

标签: excel vba loops find


【解决方案1】:

有许多可能的方法来循环和删除行。

在您的示例中,当您循环数据时,使用 Activate 会显着减慢运行时间。 .Activate 几乎在任何情况下都可以完全避免。显然,我看到你所做的是使用宏记录器,所以它在那里是可以理解的。

不管怎样,试试下面的代码。这仅在 A 列中查找。如果您需要在不同的列中查找,则更改此行中的“1”:

If .Cells(r, 1).Value = "-" Then

到您要查看的列#。此外,您可能需要更改此行中的工作表名称:

With ThisWorkbook.Worksheets("Sheet3")

匹配您希望代码在其中运行的工作表名称。


因此,许多方法中的这种方法的工作方式是,您将使用For r = 1 ... 遍历 A 列中的每一行。您正在查看单元格值的每个循环迭代。如果它等于-,那么If 语句为真并继续将单元格添加到我们命名为delRng 的特殊区域中。您实际上还没有删除该行,只是在此范围内跟踪它们。

完成后,您将获取delRng 中的所有单个单元格,并使用.EntireRow 属性一次将它们全部删除。这通常比一次删除一行要快。

Public Sub RemoveJunk()

    Dim delRng As Range, r As Long
    With ThisWorkbook.Worksheets("Sheet3")
        For r = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
            If .Cells(r, 1).Value = "-" Then
                If delRng Is Nothing Then
                    Set delRng = .Cells(r, 1)
                Else
                    Set delRng = Union(delRng, .Cells(r, 1))
                End If
            End If
        Next r
    End With
    
    If Not delRng Is Nothing Then delRng.EntireRow.Delete

End Sub

【讨论】:

  • 非常感谢您的精彩解释。我马上试试!
  • 我唯一需要更改的是第一个 If 缩进到引用单元格(r,2),因为“-”符号只会出现在 B 到 G 列中。否则它工作得很好。我试图通过某种查找循环来解决这个问题,结果发现你这样做的方式要容易得多!我实际上是按照你的逻辑,只是我没有看到一些方法和其他东西,例如联盟,但我还在学习。非常感谢您的帮助
猜你喜欢
  • 2020-08-18
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
相关资源
最近更新 更多