2015-10-19 4 views
0

Я застрял на правильном синтаксисе для написания VLookup в VBA, где вы хотите вернуть несколько столбцов.VLookup с несколькими «col_index_num» s

Обычно вы используете {2,3,4,5}, однако VBA не принимает это как действительное.

Set Sheet1 = ActiveWorkbook.Sheets(1) 
Set Sheet2 = ActiveWorkbook.Sheets(2) 
Set Sheet3 = ActiveWorkbook.Sheets(2) 

result = Application.WorksheetFunction.VLookup(Sheet2.Range("A2"), Sheet1.Range("AA9:AF20"), {2,3,5,6,7,8,9}, False) 

Я сделал многочисленные поиски в Интернете для этого решения, но не четкий ответ на то, как правильно синтаксис {2,3,5,6,7,8,9}

+0

Почему вы хотите, чтобы сделать это, как вопрос интересов? Лучше ИМО использовать «Матч» для проверки нужного вам значения, а затем использовать «Строки», чтобы вернуть целую строку, если это то, что вы хотите. – Rory

ответ

0

WorksheetFunction не может выполнить формулу массива. Evaluate жестяная банка.

Так

sFormula = "VLOOKUP(" & Sheet2.Range("A2").Address(external:=True) & "," & Sheet1.Range("AA9:AF20").Address(external:=True) & ",{2,3,5,6,7,8,9},FALSE)" 

result = Evaluate(sFormula) 

Но от AA до AF всего 6 столбцов. поэтому попытка получить столбец 7,8,9 приведет к ошибке.

Так может быть

sFormula = "VLOOKUP(" & Sheet2.Range("A2").Address(external:=True) & "," & Sheet1.Range("AA9:AI20").Address(external:=True) & ",{2,3,5,6,7,8,9},FALSE)" 

result = Evaluate(sFormula) 
0

Попробуйте циклически, как

sub Mlookup() 
    dim i as integer 
    dim res 

    for i = 1 to 5 
     res = Application.WorksheetFunction.VLookup(Sheet2.Range("A2"), Sheet1.Range("AA9:AF20"), i, False) 
     sheet1.range("A"&i").value = res 
    next i 

end sub 
Смежные вопросы