我正在尝试在excel VBA中创建等效的= IFERROR(VLOOKUP(), - 1)公式,其中函数将在我的数据表中查找文本并返回第5列中的数字(如果文本是在表中,如果不是,则为-1。我已经在excel中测试了上面的公式,它给了我想要的结果问题是当我在VBA中编码时我一直得到#VALUE!如果文本不在表中,则会出错。如果文本在表中,代码将生成所需的数字。我的代码如下:
Function CCC(A As Variant)
Dim B As Variant
B = Application.WorksheetFunction.IfError(Application.WorksheetFunction.VLookup(A, Sheets("DAP").Range("$B$4:$X$7"), 5, False), -1)
CCC = B
End Function
考虑到这一点,有没有办法修复代码,以便IFERROR(VLOOKUP)工作,如果不是,什么是在VBA中实现相同结果的最佳替代方案?
答案 0 :(得分:0)
如果找不到值,使用Application.WorksheetFunction.VLookup(
将破坏代码。
将其包装在vba错误控制中。
Function CCC(A As Range)
Dim B As Variant
B = -1
On Error Resume Next
B = Application.WorksheetFunction.VLookup(A.Value, Sheets("DAP").Range("$B$4:$X$7"), 5, False)
On error goto 0
CCC = B
End Function
另一种方法是通过删除.WorksheetFormula
然后测试结果来延迟绑定。
Function CCC(A As Range)
Dim B As Variant
B = Application.VLookup(A.Value, Sheets("DAP").Range("$B$4:$X$7"), 5, False)
If IsError(B) Then
CCC = -1
Else
CCC = B
End If
End Function