2016-11-22 69 views
0

我試圖在VBA中執行一系列VLOOKUP,並且認爲必須有一種方法可以批量執行EVALUATE函數,而不是單獨循環表單上的值(我已經知道該怎麼做)。但我在努力使查找值「動態」。 這是我有這麼遠:在VBA中結合EVALUATE和VLOOKUP

Dim ws1 as worksheets, ws2 as worksheet, rngJ2 as Range, Lastrow2 as long 

Set ws1 = ActiveWorkbook.Sheets("Sheet1") 
Set ws2 = ActiveWorkbook.Sheets("Sheet2") 

LastRow2 = ws2.Cells.Find(What:="*", _ 
       After:=Range("A1"), _ 
       LookAt:=xlPart, _ 
       LookIn:=xlFormulas, _ 
       SearchOrder:=xlByRows, _ 
       SearchDirection:=xlPrevious, _ 
       MatchCase:=False).Row 

set rngJ2 = ws2.range("J2:J" & Lastrow2) 

現在,這裏是我想下一步該怎麼做,知道rngJ2.address(行)的部分是不正確的語法:

rngJ2.Value= Evaluate("VLOOKUP(Sheet2!I" & rngJ2.address(row) & ",Sheet1!A:H,8,FALSE)") 

我正在嘗試使用rngJ2.address(row)部分來爲該範圍中的每個單元格定義相應的行,以便Cell J5使用I5作爲查找值,J12使用I12等。

Any想法?

+0

範圍rngJ2將具有多行,Vlookup的第一個標準是一個單元格。 –

+0

您是否將VLookUp結果放入列中?如果是這樣,您可以將公式輸入到第一個公式中,並使用Range.FillDown快速在多行中使用公式。 – Rdster

回答

1

真的沒有任何需要Evaluate在那裏。您可以使用Worksheetfunction版本代替:

rngJ2.Value = WorksheetFunction.VLookup(rngJ2.Offset(, -1), Sheets("Sheet1").Range("A:H"), 8, False) 
+0

我沒有想到這個抵消技巧,但這正是我所期待的。我不知道VLOOKUP可以被分配到這樣的整個範圍,所以謝謝! –

+0

VLOOKUP可以通過在查找值部分使用多個單元格執行'Evaluate'操作,但它需要一些額外的構造,所以這是一個**很簡單! – Rory