2015-06-08 3 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'. На самом деле он ничего не сделает без адресата или строки 'Paste'. – Rory

0

если вы хотите сохранить ВПР, я предложил бы использовать диапазон типы здесь, как это:

Dim LookUpRange As Range 
Dim row As Range 

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

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

и толкать это в петлю, которая идет через множество столбцов, которые необходимо принимать данные, используя I для «{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,01,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116}, "

+0

так что всего два петли? Один идет через столбцы и один идет через строки? –

+0

Да, вы поняли это правильно. 'для I = от 3 до 116' ' Next I' –

Смежные вопросы