2013-11-25 198 views
2

嘗試根據兩個輸入的值返回L,M,H值。這是我有:VBA if 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)顯然是M時返回H.爲什麼?

回答

3

中間變量的條件(即使它們可以被VBA解釋器接受)幾乎肯定不會產生您期望的結果。將所有這些條件的形式相當於:

variable condition constant 

例:更改

80 <= x <= 120 

x >= 80 and x <= 120 
+0

DUH,非常感謝修復它。我是VBA的新手,但做出了可以像Python一樣行事的可憐假設。再次感謝! – jluk

+0

@Robert,所以它將'variable condition variable'作爲'or'語句處理? – 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