VBA, эквивалентный VLOOKUP с несколькими col_index_nums

каков синтаксис для написания vlookup в vba, где вы хотите вернуть несколько столбцов? Мой код:

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: дополнительные разъяснения

Если бы вы делали это с обычным vlookup, это выглядело бы так:

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

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

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


person msim    schedule 21.01.2015    source источник
comment
Можете ли вы дать некоторые дополнительные разъяснения? Вы пытаетесь заполнить все пять ячеек одновременно?   -  person basodre    schedule 21.01.2015
comment
И как ВПР с несколькими col_index_num будет работать даже как обычная формула Excel? WorksheetFunction работает так же, как функция рабочего листа; если это невозможно сделать с помощью ВПР, это невозможно сделать с помощью ВПР в VBA.   -  person Mathieu Guindon    schedule 21.01.2015
comment
добавлено уточнение, извините   -  person msim    schedule 21.01.2015


Ответы (1)


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

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)")
person Jim Becker    schedule 25.01.2015