VBA Vlookup не находит ценности, которые существуют - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю с двумя различными рабочими листами в одной рабочей книге.Моя задача - найти модель # продукта из Sheet1, найти ту же модель # в Sheet2 и получить стоимость этого продукта, расположенного в нескольких столбцах.

Естественно, я попыталсяиспользовать Vlookup, потому что этой функции достаточно для этого запроса.

Я опубликую свой код ниже, а затем объясню проблемы, с которыми я сталкиваюсь.Я новичок в VBA и искал много разных постов в стеке и пробовал разные решения, но безрезультатно.




Private Sub CommandButton1_Click()

Dim tbdCell As Range
Dim model As Range
Dim cell As Range
Dim PAsheet As Worksheet
Dim DB As Worksheet
Dim target As Variant
Set DB = Worksheets("Database")
Set PAsheet = Sheets("Pricing Agreement")


Set tbdCell = Range("N2:N4700")
On Error GoTo ErrHandler:
For Each cell In tbdCell
    Set model = cell.Offset(0, -6)
    cell = WorksheetFunction.VLookup((CStr(model)), PAsheet.Range(CStr("C2:D2000")), 6, True)
    Next cell

    Exit Sub


ErrHandler:
    Select Case Err.Number
        Case 0

        Case 1004
            cell = "missing"
            Resume Next
        Case Else
            MsgBox Err.Number & vbNewLine & Err.Description
            Exit Sub

    End Select

End Sub



Таким образом, после отладки и тестирования большинство вещей работает, пока мы не дойдем до линии, где я использую функцию Vlookup.Я неизменно получаю ошибку 1004, даже если данные существуют в другой электронной таблице.Таким образом, ячейки, которые мне нужно заполнить, всегда будут заполняться «отсутствующими», как указано выше в Коде обработки ошибок.

Я пытался использовать версию приложения для функции.Я попытался использовать разные переменные и объявил их как тип Variant.Я даже пытался сделать диапазон table_array только одной строкой с 2-х столбцовым покрытием, пытаясь найти совпадение для одной конкретной модели #.До сих пор, чтобы избежать несоответствия типов, я преобразую «модель» (модель #) в строку, а также диапазон поиска в PAsheet в строку.Последнее, что я попробовал, было не искать точное совпадение (последний аргумент был установлен в true)

Так что в ожидании будущих вопросов о данных, на которых основан Vlookup, я включу необходимую информацию о том, какоба листа отформатированы.

Информация, которая может вам понадобиться:

Мы начинаем с колонки N, где цены отсутствуют в Sheet1 (База данных).

Я установил модель на значение в той же строке, 6 столбцов слева (столбец H).

Тестирование с помощью MsgBox показало, что это работает для меня, и при отладке переменная модели отображает правильную информацию, так что это не проблема.

В PAsheet # моделив столбце C. Первоначально я сделал таблицу поиска из C2: C2000 или около того, но меня убедили, что для работы Vlookup требуется таблица из двух столбцов, поэтому я изменил C2000 на D2000.Теперь диапазон поиска представляет собой таблицу из двух столбцов.

В PAsheet стоимость продукта указана в столбце H, который находится на расстоянии 5 от столбца C. Мне нужно это значение, поэтому я поставил 6 в аргументе column_index.Раньше было 5, потому что я думал, что вы не посчитали первый столбец, но я исправил это.

Наконец я в основном протестировал с «Ложь» в качестве последнего аргумента, но в любом случае это не работает.


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

Итак, что я делаю здесь не так??Заранее спасибо.

1 Ответ

0 голосов
/ 25 сентября 2018

Если вы пытаетесь вернуть шестое значение из Column C, ваш диапазон должен быть обновлен до `PAsheet.Range (" C2: H2000 ")

cell.Value = WorksheetFunction.VLookup(cell.Offset(, -6), PAsheet.Range("C2:H2000"), 6, False)
...