返回列表 上一主題 發帖

[發問] 邏輯條件判斷請益

[發問] 邏輯條件判斷請益

本帖最後由 li_hsien 於 2015-2-9 18:50 編輯

有個邏輯判斷問題請教各位大大

主要邏輯 -> 如果A2跟C欄比對,有比到的話則B2值=D2

判別條件細分:
1. 如果A2跟C欄vlookup比對的到
2. 如果比到的值(D2)不為空值
若上述條件成立則將D2值填入B2
  1.      
  2. If IsError(Application.VLookup(Range("A2") , Range("C:D") , 2 , 0)) = False And Application.VLookup(Range("A2") , Range("C:D") , 2 , 0) <> "" Then
  3.         
  4.         Range("B2") = Application.VLookup(Range("A2") , Range("C:D") , 2 , 0)
  5.      
  6. End If
複製代碼
現在令小弟疑惑的點是

為什麼我A2的值確實不存在於C欄中

但B2還是會被填入值(顯示#NA)
  1. IsError(Application.VLookup(Range("A2") , Range("C:D") , 2 , 0))
複製代碼
上方這段 如果A2不存在於C欄中不是應該等於True嗎???
所以我條件是等於False應該不會往下執行吧???


不知小弟是哪邊誤解  煩請各位解惑

謝謝!!!
用功到世界末日那一天∼∼∼

回復 2# stillfish00

感謝stillfish提點!!!

真的是On Error Resume Next的影響

後來我發現下段這行
  1. Application.VLookup(Range("A1"), Range("C:D"), 2, 0) <> ""
複製代碼
因為比對不到所以出錯了

但我下了On Error Resume Next所以就往下執行了

導致值給了#NA


後來修正作法變成是將兩個條件分開
  1. If IsError(Application.VLookup(Range("A1"), Range("C:D"), 2, 0)) = False Then

  2.     If Application.VLookup(Range("A1"), Range("C:D"), 2, 0) <> "" Then   
  3.        Range("B1") = Application.VLookup(Range("A2"), Range("C:D"), 2, 0)
  4.     End If
  5.         
  6. End If
複製代碼
但好像不是很聰明的作法@@
用功到世界末日那一天∼∼∼

TOP

回復 4# stillfish00

謝謝stillfish00協助

其實設定On Error Resume Next

主要是因為常常會給使用者使用

盡可能不要讓錯誤訊息跳出來

但要以Msg顯示好像沒有比較適當的字眼

所以就加上去了

但缺點就是程式碼若有誤 常會一時抓不出來@@
用功到世界末日那一天∼∼∼

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題