使用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中, 逻辑运算符和按位运算符的顺序如下所示:

  1. 否定(不)
  2. 连接(和,还)
  3. 包含分离(或OrElse)
  4. 独占析取(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中的运算符优先级