Par*_*gue 9 excel vba excel-vba
我正在创建一个快速子来对电子邮件进行有效性检查.我想删除"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
Run Code Online (Sandbox Code Playgroud)
Jon*_*ell 21
您不需要循环来执行此操作.自动过滤器效率更高.(类似于SQL中的cursor vs 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
Run Code Online (Sandbox Code Playgroud)
笔记:
.Offset(1,0)
阻止我们删除标题行.SpecialCells(xlCellTypeVisible)
指定应用自动过滤器后剩余的行.EntireRow.Delete
删除标题行以外的所有可见行单步执行代码,您可以看到每行的功能.在VBA编辑器中使用F8.