Определенно возможно сделать то, что вы просите.Позвольте мне также предложить несколько поправок для оптимизации.
Это сравнение встречается в коде несколько раз:
'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 не является необходимым.Как отметил Скотт Крейнер, будьте осторожны с круглыми скобками.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)
Надеюсь, что вы на вашем пути.