2015-10-19 32 views
0

我被困在正确的语法中,用于在VBA中写入VLookup,您想要返回多列。具有多个“col_index_num”的VLookup 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

为什么你要做到这一点,为感兴趣的事?最好使用'Match'来检查你想要的值,然后使用'Rows'返回整行,如果这是你想要的。 – 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) 

但从AAAF只有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