使用IF和Excel的组合
我试图在Excel VBA中有两个可变的条件variablesX和Y,
举例来说
Sub Test() X = 6 Y = 11 If X < 3 Or X > 5 And Y < 10 Then X = 10 Else X = 11 End If MsgBox X End Sub
对于X项来说,当X<3 or X>5
似乎工作的很好,但是当我把Y改成任何大于10的值时,都说11,那么结果是10,但是应该是11,可以请让我知道如果我在代码中丢失了某些东西,那么当X<3 or X>5 and (y=11)>10
,结果必须是11。
问候,肯尼思
考虑:
Sub Test() X = 6 Y = 11 If (X < 3 Or X > 5) And Y < 10 Then X = 10 Else X = 11 End If MsgBox X End Sub
这是运算符优先级的问题。 在VB中, 逻辑运算符和按位运算符的顺序如下所示:
- 否定(不)
- 连接(和,还)
- 包含分离(或OrElse)
- 独占析取(Xor)
结果是, and
在你的条件之前or
之中被执行,导致右边的or
是整个expression式X > 5 And Y < 10
。
您的条件执行如下:
If X < 3 Or (X > 5 And Y < 10) Then
我相信你真正想要的是以下(这应该可以解决你的问题):
If (X < 3 Or X > 5) And Y < 10 Then
资料来源:
- MSDN:在Visual Basic中的运算符优先级