gpt4 book ai didi

excel - 做直到什么都没找到

转载 作者:行者123 更新时间:2023-12-04 01:14:19 37 4
gpt4 key购买 nike

我正在开发一个宏来查看股票数据。当给定日期没有可用数据时,数据会在这些行中显示“-”。我需要删除那些行。我想出了一个删除找到的第一行的宏。我需要继续这样做,直到所有带“-”的行都被删除。

如何使用 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

最佳答案

有许多可能的方法来遍历和删除行。

在您的示例中,在循环数据时使用 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

关于excel - 做直到什么都没找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63839403/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com