gpt4 book ai didi

vba - 如果单元格不包含 '@' 则删除整行的有效方法

转载 作者:行者123 更新时间:2023-12-01 19:11:05 26 4
gpt4 key购买 nike

我正在创建一个快速子程序来对电子邮件进行有效性检查。我想删除“E”列中不包含“@”的整行联系人数据。我使用了下面的宏,但运行速度太慢,因为 Excel 删除后会移动所有行。

我尝试过另一种技术,如下所示:set rng = union(rng,c.EntireRow) ,然后删除整个范围,但我无法阻止错误消息。

我还尝试过将每一行添加到选择中,然后在选择所有内容后(如 ctrl+select),随后将其删除,但我找不到合适的语法。

有什么想法吗?

Sub Deleteit()
Application.ScreenUpdating = False

Dim pos As Integer
Dim c As Range

For Each c In Range("E:E")

pos = InStr(c.Value, "@")
If pos = 0 Then
c.EntireRow.Delete
End If
Next

Application.ScreenUpdating = True
End Sub

最佳答案

您不需要循环来执行此操作。自动过滤器效率更高。 (类似于SQL中的游标与where子句)

自动过滤所有不包含“@”的行,然后将其删除,如下所示:

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

Set ws = ActiveWorkbook.Sheets("Sheet1")

lastRow = ws.Range("E" & ws.Rows.Count).End(xlUp).Row

Set rng = ws.Range("E1:E" & lastRow)

' filter and delete all but header row
With rng
.AutoFilter Field:=1, Criteria1:="<>*@*"
.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With

' turn off the filters
ws.AutoFilterMode = False
End Sub

注释:

  • .Offset(1,0) 阻止我们删除标题行
  • .SpecialCells(xlCellTypeVisible) 指定应用自动筛选后保留的行
  • .EntireRow.Delete 删除除标题行之外的所有可见行

单步执行代码,您可以看到每一行的作用。在 VBA 编辑器中使用 F8。

关于vba - 如果单元格不包含 '@' 则删除整行的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16901436/

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