2013-11-25 3 views
2

Попытка вернуть значение L, M, H на основе значений двух входов. Вот что у меня есть:VBA, если else не возвращает правильные значения

If (80 <= x <= 120 And y > 120) Or (x > 120 And y > 120) Or (x > 120 And 80 <= y <= 120) Then 
    CDI = "H" 

ElseIf (x < 80 And y <= 120) Or (x < 120 And y < 80) Then 
    CDI = "L" 

ElseIf (x < 80 And y > 120) Or (80 <= x <= 120 And 80 <= y <= 120) Or (x > 120 And y < 80) Then 
    CDI = "M" 

End If 

Возвращаемые значения не то, что мне нужно. Например, (0,291) возвращает H, когда он должен быть явно M. Почему?

ответ

3

Условия с переменной в середине (даже если они приемлемы для интерпретатора VBA) почти наверняка не приведут к ожидаемому результату. Измените все такие условия эквиваленту формы:

variable condition constant 

Пример: Изменение

80 <= x <= 120 

к

x >= 80 and x <= 120 
+0

ДУХ, большое спасибо который зафиксировал это. Я новичок в VBA, но сделал плохое предположение, что он может действовать как python. Еще раз спасибо! – jluk

+0

@Robert, поэтому он обрабатывает 'переменную переменную условия' как выражение' или'? – Elias

+1

@Elias: Я думаю, что он, вероятно, имеет больше общего с порядком операций, и способ, которым результаты вычислений интерпретируются как логические значения, но я действительно не проверял. –

1

Попробуйте это:

If (x >= 80 And x <= 120 And y > 120) Or (x > 120 And y > 120) Or (x > 120 And y >= 80 And y <= 120) Then 
    CDI = "H" 

ElseIf (x < 80 And y <= 120) Or (x < 120 And y < 80) Then 
    CDI = "L" 

ElseIf (x < 80 And y > 120) Or (x >= 80 And x <= 120 And y >= 80 And y <= 120) Or (x > 120 And y < 80) Then 
    CDI = "M" 

End If 
Смежные вопросы