以下代码为我提供了4个不同的布尔选项。
'Yes
b1 = CBool(ds.Cells(x, 1) = ds.Range("E1") And _
ds.Cells(x, 40) >= fs.Range("C2") And _
ds.Cells(x, 41) >= fs.Range("C2"))
'No
b2 = CBool(ds.Cells(x, 40) >= fs.Range("C2") And _
ds.Cells(x, 41) >= fs.Range("C2"))
'Yes/No
b3 = CBool(ds.Cells(x, 40) >= fs.Range("C2") And _
ds.Cells(x, 41) >= fs.Range("C2") And _
Abs(ds.Cells(x, 82) - ds.Cells(x, 92)) >= fs.Range("F2"))
'Yes/Yes
b4 = CBool(ds.Cells(x, 1) = ds.Range("E1") And _
ds.Cells(x, 40) >= fs.Range("C2") And _
ds.Cells(x, 41) >= fs.Range("C2") And _
Abs(ds.Cells(x, 82) - ds.Cells(x, 92)) >= fs.Range("F2"))
是否可以像这样向B3和B4添加一个OR ...
'Yes/No
b3 = CBool(ds.Cells(x, 40) >= fs.Range("C2") And _
ds.Cells(x, 41) >= fs.Range("C2") And _
Abs(ds.Cells(x, 82) - ds.Cells(x, 92)) >= fs.Range("F2")
OR
Abs(ds.Cells(x, 83) - ds.Cells(x, 93)) >= fs.Range("F2"))
答案 0 :(得分:1)
绝对可以按照您的要求去做。让我还提出一些优化调整。
此比较在代码中出现了几次:
'No
b2 = CBool(ds.Cells(x, 40) >= fs.Range("C2") And _
ds.Cells(x, 41) >= fs.Range("C2"))
因此,请先执行该任务。一旦分配,就可以重复使用。例如:
'Yes
b1 = CBool(ds.Cells(x, 1) = ds.Range("E1") And _
ds.Cells(x, 40) >= fs.Range("C2") And _
ds.Cells(x, 41) >= fs.Range("C2"))
成为:
'Yes
b1 = CBool(ds.Cells(x, 1) = ds.Range("E1") And b2)
b3变为:
'Yes/No
b3 = CBool(b2 And Abs(ds.Cells(x, 82) - ds.Cells(x, 92)) >= fs.Range("F2"))
最后,b4只是具有其他条件的b1,因此变为:
'Yes/Yes
b4 = CBool(b1 And Abs(ds.Cells(x, 82) - ds.Cells(x, 92)) >= fs.Range("F2"))
现在,如果b3和b4都将添加相同的条件,则可以添加第五个变量b5,即:
b5 = Abs(ds.Cells(x, 83) - ds.Cells(x, 93)) >= fs.Range("F2")
新的OR
如下所示:
b3 = b2 AND Abs(ds.Cells(x, 82) - ds.Cells(x, 92)) >= fs.Range("F2") And b5
正如BigBen所指出的那样,CBool不是必需的。正如Scott Craner指出的那样,请注意括号。 A And B And C Or D
与(A And B) And (C Or D)
不同。逻辑运算符的优先级顺序表示A And B And C Or D
将被评估为(A And B And C) Or D
。确保这就是您想要的。
我已对您的代码进行了更改,以帮助将来的某些开发人员了解。我使用了您的变量名,但我不喜欢它们。最好是更具描述性。
' No
b2 = ds.Cells(x, 40) >= fs.Range("C2") And _
ds.Cells(x, 41) >= fs.Range("C2")
' Yes
b1 = b2 And ds.Cells(x, 1) = ds.Range("E1")
diff1 = Abs(ds.Cells(x, 82) - ds.Cells(x, 92)) >= fs.Range("F2")
diff2 = Abs(ds.Cells(x, 83) - ds.Cells(x, 93)) >= fs.Range("F2")
' Yes/No
b3 = b2 And diff1 Or diff2 ' Possibly should be b2 And (diff1 Or diff2)
' Yes/Yes
b4 = b1 And diff1 Or diff2 ' Possibly should be b1 And (diff1 Or diff2)
希望能带您上路。