#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
не является aWorksheetFunction
и не может определить, какие переменные вы передали ему там, но они выглядят не так, как должны. Не могли бы вы добавить весь код в 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"