为了账号安全,请及时绑定邮箱和手机立即绑定

如果单元格不包含“ @”,则删除整个行的有效方法

如果单元格不包含“ @”,则删除整个行的有效方法

慕沐林林 2019-12-04 15:14:44
我正在创建一个快速子来对电子邮件进行有效性检查。我想删除“ 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 = TrueEnd Sub
查看完整描述

3 回答

?
达令说

TA贡献1821条经验 获得超6个赞

您不需要循环即可执行此操作。自动过滤器效率更高。(类似于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

笔记:


.Offset(1,0) 阻止我们删除标题行

.SpecialCells(xlCellTypeVisible) 指定在应用自动过滤器后剩余的行

.EntireRow.Delete 删除标题行以外的所有可见行

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


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 679 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信