2015-06-08 194 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' –