Использование VLookup в операторе IF - PullRequest
0 голосов
/ 03 июля 2018

Как новичок, я действительно застрял с этим и хотел бы любую помощь, которую может предложить любой.

Я пытаюсь использовать VLookup в операторе IF, но поскольку 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. Этого может быть достаточно. Можно ли проверить каждый столбец в диапазоне A: E без отдельного VLookup?

Опять же, любая помощь с этим очень ценится.

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Итак, вот один из подходов, использующий Find. При необходимости вы можете пройтись по отдельным столбцам, но, не зная больше о том, чего вы пытаетесь достичь, не знаете, что будет полезно.

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
0 голосов
/ 03 июля 2018

Никогда не используйте функцию рабочего листа, если вы планируете оценить результат. Используйте 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
' ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...