2015-06-08 193 views
0

好吧,所以我知道這是非常不正確的。我收到一個語法錯誤。 但我試圖找到一個更好的方法來做到這一點。 我想匹配訂單號碼以在另一張工作表中訂購號碼,並將所有數據從此處輸入到當前工作表中。使用VLOOKUP從VBA中的多列返回值

Sub Lookup() 
On Error Resume Next 

For Each row In Worksheets("batches").Range("B4:B1384") 
    Result = Application.evaluate("VLOOKUP(row, Worksheets("OrderLvl").Range("C4:DL1384"),{3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116}, FALSE)") 

If Result = "Error 2042" Then 
    'nothing found 
End If 
Next 
On Error GoTo 0 

End Sub 

回答

0

你沒有指明要與數據做什麼,但我會建議使用Match代替:

Sub Lookup() 

    For Each Row In Worksheets("batches").Range("B4:B1384") 
     result = Application.Match(Row.Value, Worksheets("OrderLvl").Range("C4:C1384"), 0) 

     If Not IsError(result) Then 
      Worksheets("OrderLvl").Range("E4:E1384").Cells(result).Resize(, 114).Copy 
     End If 
    Next 

End Sub 
+0

你能解釋一下嗎方法一點點,我不確定我是否跟隨。當我試圖運行它時沒有發生任何事情,實際上沒有任何數據被拷貝過來。範圍似乎是正確的。 –

+0

您沒有指定數據應該粘貼的位置,所以我只以「Copy」行爲例。如果沒有目的地或「粘貼」行,它實際上不會做任何事情。 – Rory

0

,如果你想保持VLOOKUP,我會建議使用範圍這裏的類型是這樣的:

Dim LookUpRange As Range 
Dim row As Range 

Set LookUpRange = Worksheets("batches").Range("B4:B1384") 

Result = Application.evaluate("VLOOKUP(" & row.row() & "," & LookUpRange & "," & I &",FALSE)") 

,並推入一個循環,越過你需要從數據列的主機此,我使用了「{3,4,5,6,7,8,9 ,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 ,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54 ,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 ,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116},「

+0

這樣總共兩個循環?一個穿過列,一個穿過行? –

+0

是的,你說得對。 'I = 3至116' 'Next I' –