循环数组时Not Like条件失效问题求助
问题分析与解决
你的问题出在逻辑运算符的优先级上——VBA里And的优先级比Or高,所以原代码的实际执行逻辑是:
If (arr(i, 2) Like "*Helideck*") Or _ (arr(i, 5) Like "*-HD-*" And Not arr(i, 16) Like "*Fire*") Then arrH(i, 1) = "True" End If
这就导致只要第2列匹配*Helideck*,不管第16列是不是包含Fire,都会触发arrH(i,1) = "True",看起来就是最后一个Not条件完全没起作用。
修正后的代码
给Or连接的两个条件加上括号,让它们先作为一个整体判断,再和Not条件用And关联:
For i = 2 To UBound(arr) If (arr(i, 2) Like "*Helideck*" Or _ arr(i, 5) Like "*-HD-*") And _ Not arr(i, 16) Like "*Fire*" Then arrH(i, 1) = "True" End If Next i
这样逻辑就变成:只有当(第2列匹配*Helideck* 或者 第5列匹配*-HD-*)并且 第16列不包含Fire时,才会设置arrH(i,1)为True,符合你的预期。
内容的提问来源于stack exchange,提问作者Waleed
相关产品推荐
相关产品推荐

