Excel VBA中的OR运算符用法

Excel VBA中的OR运算符用法,excel,vba,Excel,Vba,我正在试图弄清楚如何在VBA中使用或操作符。我对这种语言不是很熟悉,你也许能说出来 代码的以下部分工作正常: FirstRow = 2 LastRow = Cells(Rows.Count, "K").End(xlUp).Row - 1 For r = LastRow To FirstRow Step -1 If Cells(r, "K") <> 114 Then Rows(r).Delete End If Next r FirstRow=2 LastRow=单元格(Row

我正在试图弄清楚如何在VBA中使用
操作符。我对这种语言不是很熟悉,你也许能说出来

代码的以下部分工作正常:

FirstRow = 2
LastRow = Cells(Rows.Count, "K").End(xlUp).Row - 1
For r = LastRow To FirstRow Step -1
If Cells(r, "K") <> 114 Then
    Rows(r).Delete
End If
Next r
FirstRow=2
LastRow=单元格(Rows.Count,“K”)。结束(xlUp)。行-1
对于r=LastRow到FirstRow步骤-1
如果单元格(r,“K”)114,则
行(r)。删除
如果结束
下一个r
它删除不包含数字114的行。问题是我想把数字136和139也包括在内。我只想在K列中保留包含114、136或139的行,即(加上标题和汇总行)

我尝试了一些类似的方法:

FirstRow = 2
LastRow = Cells(Rows.Count, "K").End(xlUp).Row - 1
For r = LastRow To FirstRow Step -1
If Cells(r, "K") <> 114 Or _
   Cells(r, "K") <> 136 Or _
   Cells(r, "K") <> 139 Then
   Rows(r).Delete
End If
Next r
FirstRow=2
LastRow=单元格(Rows.Count,“K”)。结束(xlUp)。行-1
对于r=LastRow到FirstRow步骤-1
如果单元格(r,“K”)114或_
单元格(r,“K”)136或_
单元格(r,K)139
行(r)。删除
如果结束
下一个r
这些代码只是删除除标题和汇总行以外的所有内容

我做错了什么

完整代码:

Sub SouthEast()
    Dim answer As Integer
    answer = MsgBox("Continue?", vbYesNo + vbQuestion, "Show only South East")
    If answer = vbYes Then
        Dim r As Long
        Dim FirstRow As Long
        Dim LastRow As Long

        FirstRow = 2
        LastRow = Cells(Rows.Count, "K").End(xlUp).Row - 1
        For r = LastRow To FirstRow Step -1
        If Cells(r, "K") <> 114 Or _
            Cells(r, "K") <> 136 Or _
            Cells(r, "K") <> 139 Then
            Rows(r).Delete
        End If
        Next r
    Else
        'Do nothing        
End If
End Sub
东南偏南()
将答案设置为整数
答案=MsgBox(“是否继续?”,vbYesNo+vbQuestion,“仅显示东南部”)
如果答案=是,则
变暗,变长
第一排一样长
最后一排一样长
第一行=2
LastRow=单元格(Rows.Count,“K”)。结束(xlUp)。行-1
对于r=LastRow到FirstRow步骤-1
如果单元格(r,“K”)114或_
单元格(r,“K”)136或_
单元格(r,K)139
行(r)。删除
如果结束
下一个r
其他的
“什么也不做
如果结束
端接头

这是一个典型的逻辑错误:你说的是:

Not(
 (value == 114) OR
 (value == 136) OR
 (value == 139))
这等于:

Not(value == 114) AND
Not(value == 136) AND
Not(value == 139)
(value <> 114) AND
(value <> 136) AND
(value <> 139)
这等于:

Not(value == 114) AND
Not(value == 136) AND
Not(value == 139)
(value <> 114) AND
(value <> 136) AND
(value <> 139)
(值114)和
(价值136)及
(价值139)

这是一个典型的逻辑错误:你说的是:

Not(
 (value == 114) OR
 (value == 136) OR
 (value == 139))
这等于:

Not(value == 114) AND
Not(value == 136) AND
Not(value == 139)
(value <> 114) AND
(value <> 136) AND
(value <> 139)
这等于:

Not(value == 114) AND
Not(value == 136) AND
Not(value == 139)
(value <> 114) AND
(value <> 136) AND
(value <> 139)
(值114)和
(价值136)及
(价值139)
使用

调用
TRUE
,如果其中任何值为TRUE

Sub SouthEast()
    Dim answer As Integer
    answer = MsgBox("Continue?", vbYesNo + vbQuestion, "Show only South East")
    If answer = vbYes Then
        Dim r As Long
        Dim FirstRow As Long
        Dim LastRow As Long

        FirstRow = 2
        LastRow = Cells(Rows.Count, "K").End(xlUp).Row - 1
        For r = LastRow To FirstRow Step -1
        If Cells(r, "K") <> 114 And _
            Cells(r, "K") <> 136 And _
            Cells(r, "K") <> 139 Then
            Rows(r).Delete
        End If
        Next r
    Else
        'Do nothing        
End If
End Sub
调用
TRUE
如果所有值都为TRUE

Sub SouthEast()
    Dim answer As Integer
    answer = MsgBox("Continue?", vbYesNo + vbQuestion, "Show only South East")
    If answer = vbYes Then
        Dim r As Long
        Dim FirstRow As Long
        Dim LastRow As Long

        FirstRow = 2
        LastRow = Cells(Rows.Count, "K").End(xlUp).Row - 1
        For r = LastRow To FirstRow Step -1
        If Cells(r, "K") <> 114 And _
            Cells(r, "K") <> 136 And _
            Cells(r, "K") <> 139 Then
            Rows(r).Delete
        End If
        Next r
    Else
        'Do nothing        
End If
End Sub
东南偏南()
将答案设置为整数
答案=MsgBox(“是否继续?”,vbYesNo+vbQuestion,“仅显示东南部”)
如果答案=是,则
变暗,变长
第一排一样长
最后一排一样长
第一行=2
LastRow=单元格(Rows.Count,“K”)。结束(xlUp)。行-1
对于r=LastRow到FirstRow步骤-1
如果单元格(r,“K”)114和_
单元格(r,“K”)136和_
单元格(r,K)139
行(r)。删除
如果结束
下一个r
其他的
“什么也不做
如果结束
端接头
使用

调用
TRUE
,如果其中任何值为TRUE

Sub SouthEast()
    Dim answer As Integer
    answer = MsgBox("Continue?", vbYesNo + vbQuestion, "Show only South East")
    If answer = vbYes Then
        Dim r As Long
        Dim FirstRow As Long
        Dim LastRow As Long

        FirstRow = 2
        LastRow = Cells(Rows.Count, "K").End(xlUp).Row - 1
        For r = LastRow To FirstRow Step -1
        If Cells(r, "K") <> 114 And _
            Cells(r, "K") <> 136 And _
            Cells(r, "K") <> 139 Then
            Rows(r).Delete
        End If
        Next r
    Else
        'Do nothing        
End If
End Sub
调用
TRUE
如果所有值都为TRUE

Sub SouthEast()
    Dim answer As Integer
    answer = MsgBox("Continue?", vbYesNo + vbQuestion, "Show only South East")
    If answer = vbYes Then
        Dim r As Long
        Dim FirstRow As Long
        Dim LastRow As Long

        FirstRow = 2
        LastRow = Cells(Rows.Count, "K").End(xlUp).Row - 1
        For r = LastRow To FirstRow Step -1
        If Cells(r, "K") <> 114 And _
            Cells(r, "K") <> 136 And _
            Cells(r, "K") <> 139 Then
            Rows(r).Delete
        End If
        Next r
    Else
        'Do nothing        
End If
End Sub
东南偏南()
将答案设置为整数
答案=MsgBox(“是否继续?”,vbYesNo+vbQuestion,“仅显示东南部”)
如果答案=是,则
变暗,变长
第一排一样长
最后一排一样长
第一行=2
LastRow=单元格(Rows.Count,“K”)。结束(xlUp)。行-1
对于r=LastRow到FirstRow步骤-1
如果单元格(r,“K”)114和_
单元格(r,“K”)136和_
单元格(r,K)139
行(r)。删除
如果结束
下一个r
其他的
“什么也不做
如果结束
端接头

在这种情况下,您需要像这样使用
操作符:

If Cells(r, "K") <> 114 And _
   Cells(r, "K") <> 136 And _
   Cells(r, "K") <> 139 Then
   Rows(r).Delete
End If

在这种情况下,您需要使用
操作符,如下所示:

If Cells(r, "K") <> 114 And _
   Cells(r, "K") <> 136 And _
   Cells(r, "K") <> 139 Then
   Rows(r).Delete
End If

我的回答与上述类似,但我想强调一些细节

  • 最好使用optionexplicit来避免声明错误
  • 最好清楚地指出工作表和工作范围
  • 在我看来,最好使用。价值

    选项显式
    次东南()
    将答案设置为整数
    调暗r长,第一排长,最后一排长
    答案=MsgBox(“是否继续?”,vbYesNo+vbQuestion,“仅显示东南部”)
    如果答案=是,则
    使用此工作簿。工作表(“表1”)
    第一行=2
    LastRow=.Cells(.Rows.Count,“K”).End(xlUp).Row-1
    对于r=LastRow到FirstRow步骤-1
    If.单元格(r,“K”).值114和_
    .单元格(r,“K”)。值136和_
    .单元格(r,“K”)。则值为139
    .行(r).删除
    如果结束
    下一个r
    以
    其他的
    “什么也不做
    如果结束
    端接头
    

  • 我的回答与上述类似,但我想强调一些细节

  • 最好使用optionexplicit来避免声明错误
  • 最好清楚地指出工作表和工作范围
  • 在我看来,最好使用。价值

    选项显式
    次东南()
    将答案设置为整数
    调暗r长,第一排长,最后一排长
    答案=MsgBox(“是否继续?”,vbYesNo+vbQuestion,“仅显示东南部”)
    如果答案=是,则
    使用此工作簿。工作表(“表1”)
    第一行=2
    LastRow=.Cells(.Rows.Count,“K”).End(xlUp).Row-1
    对于r=LastRow到FirstRow步骤-1
    If.单元格(r,“K”).值114和_
    .单元格(r,“K”)。值136和_
    .单元格(r,“K”)。则值为139
    .行(r).删除
    如果结束
    下一个r
    以
    其他的
    “什么也不做
    如果结束
    端接头
    

  • 您需要使用
    而不是
    ,它在任何其他编程语言中都是一样的。非常感谢。请加上这一点作为回答。我想让选民解释他们的情况。这可能是一个初学者的错误,可以说是一个逻辑上的错误,但它是n