2015-01-21 2 views
0

Что такое синтаксис для записи vlookup в vba, где вы хотите вернуть несколько столбцов? Мой код:VBA эквивалентен VLOOKUP с несколькими «col_index_num» s

For i = 2 To lastrow 
    wsTEMP.Range(Cells(i, 16), Cells(i, 20)) = _ 
     Application.WorksheetFunction.VLookup(_ 
      Workbooks("template.xlsm").Worksheets("Qry").Cells(i, 1), _ 
      Workbooks("template.xlsm").Worksheets("Qry").Range("A:G"), _ 
      XXXhow do I write this??XXX, _ 
      0) 
Next i 

EDIT: Дальнейшее уточнение

Если вы делали это с нормальным ВПР это будет выглядеть так:

Выберите диапазон, скажем A1: E1, то

=VLOOKUP(G2,range,{3,4,5,6,7},0) 

Для того, чтобы {3,4,5,6,7} вернул результаты нескольких столбцов, когда вы нажмете Ctrl + Shift + Enter (они отправятся в A1, B1, и т. д., которые я выбрал перед выполнением vlookup. Как мне это сделать в VBA? Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительные разъяснения, извините.

+1

Можете ли вы предоставить какое-то дополнительное разъяснение? Вы пытаетесь сразу заполнить пять ячеек? – user3561813

+0

И как бы VLOOKUP с «несколькими col_index_num» даже работал как обычная формула Excel? 'WorksheetFunction' работает так же, как функция рабочего листа; если это невозможно сделать с помощью VLOOKUP, это невозможно сделать с помощью VLOOKUP * в VBA *. –

+0

добавлено разъяснение, извините – msim

ответ

0

Два возможных способа сделать это.

1) Если бы вы были записать макрос, то он даст вам метод FormulaArray объекта Range:

Range("I4:M4").FormulaArray = "=VLOOKUP(G2,range,{3,4,5,6,7},0)" 

2) В качестве альтернативы вы можете использовать Application.Evaluate

Range("I6:M6") = Application.Evaluate("VLOOKUP(G2,range,{3,4,5,6,7},0)")