我试图通过创建一个自定义函数并将其作为加载项加载后,为INDEX/MATCH查找方法(比常规VLOOKUP方法更快/更好)创建一个包装。为什么IfError返回错误?
到目前为止这么好,但我期望的行为是,当没有找到要查找的值时,它应该返回空白(“”)而不是#VALUE !.所以我试图用IFERROR WorksheetFunction,以实现在Excel表单这种以同样的方式我想:
Function FastLookup(parLookupKey As Variant, parLookupRange As Range, parReturnRange As Range) As Variant
FastLookup = Application.WorksheetFunction.IfError(Application.WorksheetFunction.Index(parReturnRange, Application.WorksheetFunction.Match(parLookupKey, parLookupRange, 0)), "")
End Function
同样,这仍然返回#VALUE!如果在parLookupRange范围内找不到值。不用说,如果我直接在Excel工作表上使用= IFERROR(FastLookup(H6,E3:E6,F3:F6),“”),它就可以工作。
关于如何使VBA版本的IfError工作的任何想法?
'Application.WorksheetFunction.Match'会导致* VBA运行时错误*如果找不到匹配项 - 您无法使用IfError捕获该类型的错误,而是需要使用@scott craner's中显示的VBA错误处理回答。 –