Excel VBA简单如果没有声明

时间:2017-02-08 13:56:25

标签: excel vba excel-vba if-statement

我正在尝试运行一个相对简单的循环来从列表中提取我不想要的值。

除了我的“Not”语句之外,以下所有内容都正常工作,但不会产生错误......

它似乎根本没有做任何事情。

Set myRange = Range("A49:A150")
For Each myCell In myRange
    If myCell Like "*msn.com*" Or _
        myCell Like "*messaging.microsoft.com*" Or _
        Not myCell Like "*.com*" Then
        myCell.Delete
    End If
Next myCell

我很确定我在这里有一个简单的错误,但我一直无法找到它。

1 个答案:

答案 0 :(得分:11)

它不是Not声明。您的问题是,当您删除单元格时,您会更改范围,因此您的循环缺少数据。如果删除了单元格A49,则A50处的值最多移动到A49,并且从不检查。汇总有资格被删除的单元格,然后一次删除它们。

Sub test()

    Dim rngDelete As Range

    Set myrange = Range("A1:A3")
    For Each mycell In myrange.Cells
        If mycell Like "*msn.com*" Or _
            mycell Like "*messaging.microsoft.com*" Or _
            Not mycell Like "*.com*" Then

            If Not rngDelete Is Nothing Then
                Set rngDelete = Union(rngDelete, mycell)
            Else
                Set rngDelete = mycell
            End If
        End If
    Next mycell

    If Not rngDelete Is Nothing Then
        rngDelete.Delete
    End If


End Sub