Excel — ВПР через VBA

#excel #vba #vlookup

#excel #vba #ВПР

Вопрос:

Я хочу знать, как именно включить VLOOKUP функцию в мой рабочий лист Excel с помощью VBA ; Я полностью доволен VLOOKUP функцией при вводе ее непосредственно в ячейку, но я совершенно новичок в VBA.

Немного информации:

  • У меня ~ 5500 строк данных;
  • У меня есть несколько именованных диапазонов (например, catNo , catNoRange , чтобы назвать только два);
  • Я хочу использовать VBA для catNo проверки catNoRange и возврата значения шестого (6-го) столбца в catNoRange ;

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

Как я могу этого добиться?

Дополнительная информация:

Для тех из вас, кто задается вопросом, почему я не использую обычный VLOOKUP для достижения этой цели: я хочу использовать VBA, потому что я написал скрипт, который проверяет, пусты ли определенные ячейки, и если хотя бы одна из них заполнена, тогда VLOOKUP будет выполняться, принимая значение заполненной ячейкидля основных критериев поиска.

Обновление кода:

Следуя некоторым советам, я решил попытаться использовать Find функцию вместо VLOOKUP . Это не работает; вот что у меня есть:

 Sub findCode()

    Result = WorksheetFunction.Find("ABI0010P", "5012616173004", "33787")
    Range("J4").Value

End Sub
 

Комментарии:

1. Не могли бы вы не использовать Find ? Намного быстрее и удобнее для VBA: msdn.microsoft.com/en-us/library/office /…

2. Я сомневаюсь в этом (см. Раздел «Дополнительная информация:», Который я добавил). Если, конечно, вы не можете объяснить, как это сделать.

3. Если вы хотите выполнить поиск в VBA, кажется, что многие предпочитают использовать функцию Vlookup Worksheet в своем коде. Хотя это можно сделать, это медленный способ поиска данных. Это потому, что, когда мы находимся в VBA, мы можем использовать метод чрезвычайно быстрого поиска. (со страницы OzGrid о различных типах функций поиска в Excel: ozgrid.com/News/LookUpMatchIndexVBAFind.htm )

4. Интересно. Можно ли отобразить результат внутри ячейки J4 (и вниз по направлению к J5500), как я хочу, вместо отображения его в окне сообщения?

5. Find не является a WorksheetFunction и не может определить, какие переменные вы передали ему там, но они выглядят не так, как должны. Не могли бы вы добавить весь код в OP, чтобы было легче видеть, с чем вы работаете?

Ответ №1:

Для функции поиска вы хотите иметь что-то вроде этого

 Dim ws As Worksheet
Set ws = Worksheets(2)
Rowz = ws.Cells(rows.Count, 1).End(xlUp).Row
k = 2
searchvalue= ws.Cells(k, 2)
Set SEARCHRANGE= ws.Range("A2:A" amp; Rowz)
Set Findx = SEARCHRANGE.find(searchvalue, LookIn:=xlValues)
If Not Findx Is Nothing Then ws.Cells(k, 4) = "what ever you want"