Excel VBA中IF与OR语句逻辑异常致内容误清除问题排查
问题分析与修正方案
代码1的逻辑错误
你的第一个代码犯了逻辑运算符误用的核心问题:
' Loop through range For M2 = 2 To myLastRow2 If Worksheets("CRE ATW").Cells(M2, "E").Value <> "Signalling" Or _ Worksheets("CRE ATW").Cells(M2, "E").Value <> "Telecoms" Then _ Worksheets("CRE ATW").Cells(M2, "A").ClearContents Next M2
你需要的是「E列值既不是"Signalling"也不是"Telecoms"」时才清除A列,但用Or(或)会导致无论E列是什么值,条件都成立:
- 若E列是"Signalling",
<> "Telecoms"为真,整个Or条件为真 - 若E列是"Telecoms",
<> "Signalling"为真,整个Or条件为真 - 若E列是其他值,两个条件都为真,
Or条件依然为真
所以每一行都会触发清除操作。
代码2的语法错误
第二个代码的问题是语法不规范:
For M2 = 2 To myLastRow2 If Worksheets("CRE ATW").Cells(M2, "E").Value <> "Signalling" Or "Telecoms" Then _ Worksheets("CRE ATW").Cells(M2, "A").ClearContents Next M2
Or必须连接两个完整的布尔判断表达式,但你直接写Or "Telecoms",VBA会把非空字符串默认判定为True,导致整个If条件永远为真,自然每一行都会执行清除。
修正后的正确代码
把逻辑运算符改成And(与),同时用With简化重复引用:
' Loop through range For M2 = 2 To myLastRow2 With Worksheets("CRE ATW") If .Cells(M2, "E").Value <> "Signalling" And _ .Cells(M2, "E").Value <> "Telecoms" Then .Cells(M2, "A").ClearContents End If End With Next M2
这样只有当E列值既不是"Signalling"也不是"Telecoms"时,才会执行A列内容清除。
内容的提问来源于stack exchange,提问作者MAX Jebson
相关产品推荐
相关产品推荐

