2017-04-25 68 views
0

我正在嘗試在這裏執行左側查找。我知道我有一些無法找到的值,但我不明白爲什麼在循環中間彈出應用程序定義的錯誤或對象定義的錯誤。感謝您的幫助提前。左側查找錯誤

With Sheet3 
x = 2 
Do Until IsEmpty(.Range("E" & x).value) 
look = .Range("E" & x).value 
result = WorksheetFunction.Index(Sheet2.Range("A:A"), 
WorksheetFunction.Match(look, Sheet2.Range("B:B"), 0)) 
    If Not IsError(result) Then 
     .Range("F" & x).value = result 
    Else 
     .Range("F" & x).value = " " 
    End If 
    x = x + 1 
Loop 
End With 
+0

請註明「我明白,我不能找到一些值」 –

+0

意味着一些值不能在VLOOKUP中找到,我想退貨作爲空白 –

+0

錯誤發生在什麼單元格值? –

回答

0

在VBA中,如果一個Variant持有vbError值IsErrror函數返回true。即使此變量是變體,但未找到匹配時發生錯誤,該值也不會被分配給Result變量。您將不得不使用On Error Goto ...方法捕獲該錯誤。

這不是什麼大不了的事。你的代碼可能看起來像這樣。

Result = "" 
On Error Resume Next 
Result = WorksheetFunction.Index(Sheet2.Range("A:A"), _ 
     WorksheetFunction.Match(look, Sheet2.Range("B:B"), 0)) 
.Range("F" & x).Value = Result 

如果出現錯誤,Result變量將保留之前的值。因此它在功能之前設置爲「」。所以你不需要測試是否有錯誤。

在編寫這段代碼的過程中,我發現你也錯過了Index函數換行符的下劃線。

+0

此方法適用於vlookup,但爲什麼不適用於此? –

+0

它不適用於匹配。 – Variatus

+0

我感謝您的幫助! –

0

這個數組公式能完成這項工作嗎?

=INDEX($B$1:$B$8,SMALL(IF($A$1:$A$8=$E$1,ROW($A$1:$A$8)),ROW‌​S($G$1:$G1))) 

它是行1至8