標題:
[發問]
邏輯條件判斷請益
[打印本頁]
作者:
li_hsien
時間:
2015-2-9 18:49
標題:
邏輯條件判斷請益
本帖最後由 li_hsien 於 2015-2-9 18:50 編輯
有個邏輯判斷問題請教各位大大
主要邏輯 -> 如果A2跟C欄比對,有比到的話則B2值=D2
判別條件細分:
1. 如果A2跟C欄vlookup比對的到
2. 如果比到的值(D2)不為空值
若上述條件成立則將D2值填入B2
If IsError(Application.VLookup(Range("A2") , Range("C:D") , 2 , 0)) = False And Application.VLookup(Range("A2") , Range("C:D") , 2 , 0) <> "" Then
Range("B2") = Application.VLookup(Range("A2") , Range("C:D") , 2 , 0)
End If
複製代碼
現在令小弟疑惑的點是
為什麼我A2的值確實不存在於C欄中
但B2還是會被填入值(顯示#NA)
IsError(Application.VLookup(Range("A2") , Range("C:D") , 2 , 0))
複製代碼
上方這段 如果A2不存在於C欄中不是應該等於True嗎???
所以我條件是等於False應該不會往下執行吧???
不知小弟是哪邊誤解 煩請各位解惑
謝謝!!!
作者:
stillfish00
時間:
2015-2-10 14:07
回復
1#
li_hsien
附檔看看吧, 我直接run你這寫法會有執行階段錯誤。
該不會你前面下了 On Error Resume Next 指令吧...
作者:
li_hsien
時間:
2015-2-11 08:30
回復
2#
stillfish00
感謝stillfish提點!!!
真的是On Error Resume Next的影響
後來我發現下段這行
Application.VLookup(Range("A1"), Range("C:D"), 2, 0) <> ""
複製代碼
因為比對不到所以出錯了
但我下了On Error Resume Next所以就往下執行了
導致值給了#NA
後來修正作法變成是將兩個條件分開
If IsError(Application.VLookup(Range("A1"), Range("C:D"), 2, 0)) = False Then
If Application.VLookup(Range("A1"), Range("C:D"), 2, 0) <> "" Then
Range("B1") = Application.VLookup(Range("A2"), Range("C:D"), 2, 0)
End If
End If
複製代碼
但好像不是很聰明的作法@@
作者:
stillfish00
時間:
2015-2-11 11:10
本帖最後由 stillfish00 於 2015-2-11 11:16 編輯
回復
3#
li_hsien
沒錯啊,這種條件就是要分開寫
然後你可以把 vlookup 查表的值提出來,不然你這樣要查3次
Sub Test33()
Dim value As Variant
value = Application.VLookup(Range("A2"), Range("C:D"), 2, 0)
If IsError(value) Then
MsgBox Range("A2") & " is not found": Exit Sub
ElseIf value <> "" Then
Range("B2").value = value
End If
End Sub
複製代碼
重點是: 濫用 On Error Resume Next 是大忌
作者:
li_hsien
時間:
2015-2-11 17:38
回復
4#
stillfish00
謝謝stillfish00協助
其實設定On Error Resume Next
主要是因為常常會給使用者使用
盡可能不要讓錯誤訊息跳出來
但要以Msg顯示好像沒有比較適當的字眼
所以就加上去了
但缺點就是程式碼若有誤 常會一時抓不出來@@
作者:
stillfish00
時間:
2015-2-12 16:43
回復
5#
li_hsien
對我來說這樣就是濫用了,因為你是為了避免不知道何時何處會出現的錯誤訊息,而只在一開始的地方加 On Error Resume Next ,這樣是不對的。
On Error Resume Next 應該用在你知道會發生執行階段錯誤的地方(該行程式碼),而且你知道錯誤的原因並且你判斷可以忽略這錯誤,然後在該行前面加 On Error Resume Next,該行後面加 On Error Goto 0,這樣才是正確的用法。
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)