2015-11-10 4 views
0

Я пробовал искать google и с предлагаемыми кодами, но все еще не мог работать с VLookup.Как сделать цикл VLookup

У меня есть две книги, одна из них - ActiveWorkbook, другая - Template.xls (с именем рабочего листа поиска «CtyAccesCode» в диапазоне A1: B13).

То, что я хочу сделать, это если ячейка в колонке AD является НЕ пустым, а затем использовать ВПР в другой ячейке в столбце AB в той же строке, чтобы найти корреспондент.

Ниже то, что я использовал, но Excel не дает значение после того, как я запускаю этот код:

For Each cell In Range("H2:H" & LastRow) ' This is the lookup range 
    If IsEmpty(Range("AD" & i).Value) = False Then ' This finds out if cell in AD is empty 
     Cells(i, 28) = Application.WorksheetFunction.VLookup(cell, _ 
     Workbooks("Template.xls").Worksheets("CtyAccesCode") _ 
    .Range("A1:B13"), 2, 0) ' This puts the find out value in cells in column AB or 28 
    End If 
Next cell 
+0

могли бы вы загрузить полный код здесь – Linga

+1

Почему 'IsEmpty (Range ("AD" и я) .Value) = False'? Это противоположность тому, что вы описали. – Jeeped

+0

Извините, я опустил «Не» в моем первоначальном описании, я хочу, если ячейка не пуста, то другая ячейка, такая же строка, будет использовать vlookup. Благодарю. – lukayl

ответ

1

Почему вы используете i? Не должно быть cell.row? Также было бы намного проще использовать объекты, а затем работать с ними. Смотрите этот код (Непроверено)

Sub Sample() 
    Dim wbThis As Workbook, wbThat As Workbook 
    Dim wsThis As Worksheet, wsThat As Worksheet 
    Dim aCell As Range 

    Set wbThis = ThisWorkbook 
    '~~> Let's say this is the sheet where you want the result 
    '~~> Change name as applicable 
    Set wsThis = wbThis.Sheets("Sheet1") 

    '~~> Change path as applicable 
    Set wbThat = Workbooks.Open("C:\Template.xls") 
    Set wsThat = wbThat.Sheets("CtyAccesCode") 

    With wsThis 
     For Each aCell In .Range("H2:H" & LastRow) 
      If Len(Trim(.Range("AD" & aCell.Row).Value)) <> 0 Then 
       .Cells(aCell.Row, 28) = Application.WorksheetFunction.VLookup(_ 
             aCell.Value, wsThat.Range("A1:B13"), 2, 0) 
      End If 
     Next aCell 
    End With 

    wbThat.Close (False) 
End Sub 
+0

Да, это работает! Благодарю. – lukayl

0

Что-то вроде этого следует сделать трюк:

For Each cell In Range("H2:H" & LastRow) ' This is the lookup range 
    If IsEmpty(Range("AD" & cell.Row).Value) = False Then ' This finds out if cell in AD is empty 
     Cells(i, 28) = Application.WorksheetFunction.VLookup(Range("AD" & cell.Row), _ 
       Workbooks("Template.xls").Worksheets("CtyAccesCode") _ 
       .Range("A1:B13"), 2, 0) ' This puts the find out value in cells in column AB or 28 
    Else 
     Cells(i, 28) = Application.WorksheetFunction.VLookup(Range("AB" & cell.Row), _ 
       Workbooks("Template.xls").Worksheets("CtyAccesCode") _ 
       .Range("A1:B13"), 2, 0) ' This puts the find out value in cells in column AB or 28 
    End If 
Next cell 
Смежные вопросы