VBA中And/Or逻辑困惑:为何第二个If语句生效?
逻辑判断错误原因解析
你的核心需求是:当输入的水果不属于Peach、Banana、Mango三者之一时,弹出"Fruit Not Available"提示。我们来拆解两段代码的逻辑差异:
第一段用Or的代码问题
这段代码的判断逻辑是:只要输入的水果不是Peach,或者不是Banana,或者不是Mango,就触发提示。
If Item.Value <> "Peach" or Item.Value <> "Banana" or Item.Value <> "Mango" Then MsgBox "Fruit Not Available" End If
但不管你输入什么水果,这个条件永远为真:
- 假设输入的是Peach,那么
Item.Value <> "Banana"和Item.Value <> "Mango"都是成立的,Or只要有一个条件成立就会执行提示,这就导致合法水果也弹出错误提示; - 输入Apple、Orange这类非法水果时,三个条件都成立,虽然会弹出提示,但合法水果的误判已经让逻辑完全失效。
第二段用And的代码逻辑
这段代码的判断逻辑是:输入的水果同时不是Peach、不是Banana、不是Mango,才触发提示。
If Item.Value <> "Peach" And Item.Value <> "Banana" And Item.Value <> "Mango" Then MsgBox "Fruit Not Available" End If
这个逻辑完全匹配你的需求:
- 输入Peach/Banana/Mango中的任意一个时,对应的
<> 水果名条件不成立,And要求所有条件都成立才执行,所以不会弹出提示; - 输入Apple、Orange这类不在列表里的水果时,三个条件都成立,触发提示。
简单说,你要判断的是「不在集合内」,对应的逻辑是「同时不等于集合中的每一个元素」,而非「不等于集合中的某一个元素」,所以必须用And而非Or。
内容的提问来源于stack exchange,提问作者Deon Bowers
相关产品推荐
相关产品推荐

