在IF语句中使用VLookup

时间:2018-07-03 11:16:23

标签: excel excel-vba vba

作为一个新手,我真的很坚持这一点,很乐意任何人都能提供的帮助。

我正在尝试在IF语句中使用VLookup,但是由于VLookup返回#N / A以获得否定结果,因此If语句无法识别出该错误并且会出错,而不是继续进行操作。

Public Const ParametersAssembly = "TabDocumentPath|strFrameworkPath|FrameworkFullPath|FrameworkAllFile|AssembliesPath|FrameworkTabs|SaveAsExtension|CopyTabsBefore"
Public Const ElementSeparator = "|"

vList = Split(ParameterList, ElementSeparator, -1, vbTextCompare)

For Each vParameter In vList
    If Application.WorksheetFunction.VLookup(vParameter, Worksheets("Configuration").Range("A:E"), 1, False) <> vParameter Then        
       MsgBox vParameter " does not exist in range"       
    End If
Next vParameter

我目前正在搜索范围A:E中的第一列。这可能就足够了。是否可以在没有单独的VLookup的情况下检查A:E范围内的每一列?

再次感谢您对此的任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:4)

如果您打算评估结果,请不要使用工作表功能。使用Application.Vlookup返回一个变体,并在检查该值之前使用IsError进行测试。

这只是测试存在性,因此Application.Match会更高效,并且您只需要测试是否没有匹配项即可。

' ...
For Each vParameter In vList
    If IsError(Application.Match(vParameter, Worksheets("Configuration").Range("A:A"), 0)) Then        
       MsgBox vParameter " does not exist in range"       
    End If
Next vParameter
' ...

答案 1 :(得分:1)

这是使用查找的一种方法。如果需要,您可以遍历各个列,但是在不了解要达到的目标的情况下,不确定是否有用。

Sub x()

Dim r As Range, vList

Public Const ParametersAssembly = "TabDocumentPath|strFrameworkPath|FrameworkFullPath|FrameworkAllFile|AssembliesPath|FrameworkTabs|SaveAsExtension|CopyTabsBefore"
Public Const ElementSeparator = "|"

vList = Split(ParameterList, ElementSeparator, -1, vbTextCompare)

For Each vParameter In vList
    Set r = Worksheets("Configuration").Range("A:E").Find(What:=vParameter, LookAt:=xlWhole, _
                          MatchCase:=False, SearchFormat:=False)
    If r Is Nothing Then
       MsgBox vParameter & " does not exist in range"
    End If
Next vParameter

End Sub