2015-10-19 63 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