Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在VBA UDF中结合VLookUp IfError_Excel_Vba_Excel Formula - Fatal编程技术网

Excel 在VBA UDF中结合VLookUp IfError

Excel 在VBA UDF中结合VLookUp IfError,excel,vba,excel-formula,Excel,Vba,Excel Formula,我经常使用不同的矩阵和数据库,并经常使用函数IFERROR与VLOOKUP相结合来快速提取数据并推进我的任务。把它完整地写下来是一件痛苦的事,每次都要写错,然后把它完整地打出来 最近,我一直在尝试制作一个UDF,它将缩短时间,我们正在尝试这样编程 函数A(X,Y,W,Z) 端函数 问题是它只对Vlookup部分起作用,我们得到一个#值!代码返回#值时出错!(FALSE)并且我希望能够随意将其替换为0或空白 有什么方法可以成功编程吗?您不能使用工作表function.IfError捕获运行时VBA

我经常使用不同的矩阵和数据库,并经常使用函数IFERROR与VLOOKUP相结合来快速提取数据并推进我的任务。把它完整地写下来是一件痛苦的事,每次都要写错,然后把它完整地打出来

最近,我一直在尝试制作一个UDF,它将缩短时间,我们正在尝试这样编程

函数A(X,Y,W,Z)

端函数

问题是它只对Vlookup部分起作用,我们得到一个#值!代码返回#值时出错!(FALSE)并且我希望能够随意将其替换为0或空白


有什么方法可以成功编程吗?

您不能使用
工作表function.IfError
捕获运行时VBA错误。最好的方法是从VLookup中删除
工作表函数
,这将阻止它在不匹配的情况下引发运行时错误。而是检查返回值以查看它是否包含错误值

这也适用于在VBA中使用其他工作表函数,如
Match()

Function A(X, Y, W, Z)
    Dim res
    res = Application.VLookup(X, Y, W, False)
    A = IIf(IsError(res), Z, res)
End Function

你好感谢您的快速响应,但我们仍然遇到同样的问题。它仍然返回#值!当IsError(res)被激活时。我甚至尝试只返回IsError(res)值,当没有错误时,它返回FALSE,但是#value!当出现错误时。好像它无法返回真的。奇怪的是,它是这样工作的<代码>函数A(X,Y,W,Z)Dim res res=Application.VLookup(X,Y,W,False)A=IIf(Not(IsError(res)),res,Z)结束函数对我来说效果很好-例如,如果我像
=A(G12,B12:C16,2,“Error”)那样调用它
那么当不匹配时我会得到“Error”,否则我会从第二列得到值。
Function A(X, Y, W, Z)
    Dim res
    res = Application.VLookup(X, Y, W, False)
    A = IIf(IsError(res), Z, res)
End Function