Vlookup ссылается из другого файла - PullRequest
0 голосов
/ 01 февраля 2020

Попытка vlookup из другого файла. Один из файлов находится в другой папке, я получаю o в качестве результата поиска. Мне нужно найти около 100 000 строк, как мне go узнать об этом, результат поиска - строка, но когда я объявил myvlookupresult как строку, код запустился, но не было никакого вывода. Может кто-то, пожалуйста, помогите

Private Sub VLookup2()
On Error Resume Next
    Dim myLookupValue As String
    Dim myFirstColumn As Long
    Dim myLastColumn As Long
    Dim myColumnIndex As Long
    Dim myFirstRow As Long
    Dim myLastRow As Long
    Dim myVLookupResult As Long
    Dim myTableArray As Range
    Set wb1 = Workbooks("COCO PILOT MTS_2612").Sheets("Sheet1")

    myLookupValue = wb1.Range("B").Value
    myFirstColumn = 1
    myLastColumn = 3
    myColumnIndex = 3
    myFirstRow = 2
    myLastRow = 500

    With Workbooks("master zonal head lsit.xlsx").Worksheets("Sheet1")
        Set myTableArray = .Range(.Cells(myFirstRow, myFirstColumn), .Cells(myLastRow, myLastColumn))
    End With

     myVLookupResult = WorksheetFunction.VLookup(myLookupValue, myTableArray, myColumnIndex, False)
    Range("C").Value = myVLookupResult

End Sub

1 Ответ

0 голосов
/ 01 февраля 2020

Прежде всего, следующие строки некорректны ...

myLookupValue = wb1.Range("B").Value

и

Range("C").Value = myVLookupResult

Вы не указали ссылку на строку. Так должно быть что-то вроде этого ...

myLookupValue = wb1.Range("B2").Value

и

Range("C2").Value = myVLookupResult

Во-вторых, у вас есть On Error Resume Next в начале вашего кода. Это скроет все ошибки. Если вы собираетесь использовать его, он должен быть обработан правильно. Однако в этом случае нет необходимости использовать его для устранения ошибок, возвращаемых VLookup ().

Вместо использования WorksheetFunction.VLookup() мы можем использовать Application.VLookup(). Таким образом, ошибка неразрывная возникает, когда нет совпадений, для которых мы можем проверить, используя IsError(). Вот пример ...

Dim myVLookupResult As Variant

myVLookupResult = Application.VLookup(myLookupValue, myTableArray, myColumnIndex, False)

If Not IsError(myVLookupResult) Then
    Range("C2").Value = myVLookupResult
Else
    Range("C2").Value = "N/A"
End If

Обратите внимание, что myVLookupResult объявлен как Variant, поскольку VLookup () может возвращать ошибку в дополнение к строке.

РЕДАКТИРОВАТЬ

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

With Range("C2:C" & myLastRow)
    .Formula = "=VLOOKUP(B2," & myTableArray.Address(external:=True) & "," & myColumnIndex & ",0)"
    .Value = .Value
End With

Надеюсь, это поможет!

...