【问题标题】:Excel VBA simple if not statementExcel VBA 简单 if not 语句
【发布时间】:2017-06-26 04:29:06
【问题描述】:

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

除了我的“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

我很确定我在这里某个地方有一个简单的错误,但我一直找不到它。

【问题讨论】:

    标签: vba excel if-statement


    【解决方案1】:

    这不是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
    

    【讨论】:

    • 这完全有道理,我现在感觉自己像个假人哈哈。谢谢!
    • 作为一种快速而简单的解决方案,您可能只需将Step -1 添加到For 循环中,以便它向后迭代,避免在原始单元格49 之后单元格50 变为单元格49 的问题已删除。
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    相关资源
    最近更新 更多