VLookup VBA функция всегда возвращает пустую строку - PullRequest
0 голосов
/ 18 октября 2018

У меня проблема с моей функцией VBA. Application.WorksheetFunction.VLookup всегда возвращает пустую строку, я пробую параметры жесткого кода и результат один и тот же.

Public Function SeqVlookup(ByVal target As String, vrange As Range, vcol As Long)

    Dim WrdArray() As Variant  
    Dim text_string As Variant  


    text_string = target

    WrdArray() = Split(text_string,",")  

    Dim vlookupArray(0 To UBound(WrdArray)) As Variant  


    On Error Resume Next
    For i = 0 To UBound(WrdArray)  

      vlookupArray(i) = Application.WorksheetFunction.VLookup(WrdArray(i), vrange, vcol, 0)


    Next i  

      SeqVlookup = Join(vlookupArray, ",")
      MsgBox Join(vlookupArray, ",") 

End Function

Команда init

   =SEQVLOOKUP(1,Sheet2.A:B,2)

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я нашел проблему, теперь она работает

Option VBASupport 1

Public Function SeqVlookup(ByVal target As String, vSheet As String, vrange As String, vcol As Long) As Variant
Dim WrdArray() As String
   Dim vlookupArray() As Variant
   WrdArray = Split(target, ",")

   If UBound(WrdArray) = -1  Then 
        SeqVlookup = ""
   Else
       ReDim vlookupArray(LBound(WrdArray) To UBound(WrdArray))
       Dim i As Long
       Dim thisRange  As String
       thisRange = vrange
       Dim thisSheet  As String
       thisSheet = vSheet
       On Error Resume Next
       For i = LBound(WrdArray) To UBound(WrdArray)
            Dim thisVal  As Integer
            thisVal = WrdArray(i)
            vlookupArray(i) = WorksheetFunction.VLookup(thisVal, Worksheets(thisSheet).Range(thisRange), vcol, False)
       Next i
       On Error GoTo 0
       SeqVlookup = Join(vlookupArray, ",")
    End If   
End Function

= SEQVLOOKUP (C2, "sheet2", "A: B", 2)

0 голосов
/ 18 октября 2018

Код ниже, кажется, работает.Обратите внимание, что Split должен заполнить массив String.Возможная причина, по которой VLOOKUP не работал, состоит в том, что ключи поиска являются строками и, возможно, значения в диапазоне были числовыми?Код ниже пытается оба.

Public Function SeqVlookup(ByVal target As String, vrange As Range, vcol As Long) As Variant

    Dim WrdArray() As String
    Dim vlookupArray() As Variant

    WrdArray = Split(target, ",")

    ReDim vlookupArray(LBound(WrdArray) To UBound(WrdArray))

    Dim i As Long

    On Error Resume Next
    For i = LBound(WrdArray) To UBound(WrdArray)
        vlookupArray(i) = WorksheetFunction.VLookup(WrdArray(i), vrange, vcol, False)

        If IsEmpty(vlookupArray(i)) Then
            If IsNumeric(WrdArray(i)) Then
                vlookupArray(i) = WorksheetFunction.VLookup(CLng(WrdArray(i)), vrange, vcol, False)
            End If
        End If
    Next i
    On Error GoTo 0

    SeqVlookup = Join(vlookupArray, ",")
    MsgBox Join(vlookupArray, ",")

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...