2014-02-09 3 views
1

Я пытаюсь получить данные из другого файла с помощью функции VLOOKUP, однако это должно произойти только в том случае, если в столбце 8 (H) появится какое-либо из трех элементов данных.Использование VBA - Вставка VLOOKUP в зависимости от определенных значений

OLY

OLY - QUO

OLY - PRO


у меня есть следующие, и знаю, что это не правильно

Sub BlockAllocationsVlookupAll() 

Dim x As Long 
For x = 1 To 65536 

If InStr(1, Sheet1.Range("$H$" & x), "OLY") > 0 Then 
Sheet1.Range("$I$" & x) = Sheet1.Range("$I$" & x) & "sometext" 
End If 
Next 

End Sub 

Я знаю, что выше не делать то, что мне нужно кто может помочь, как к тому, что должно быть отредактирован, чтобы включить ВПР ниже

=VLOOKUP(A21,'[001 - Allocations - Blocks.xls]CurrentDayAll'!$1:$65536,9,FALSE) 

Другой вопрос, что клетки ВПР указывает на первый также будет меняться из-за разной длины отчета

Спасибо за любую помощь, оказанную

ответ

0

UPD:

Как следует вверх от комментариев,

  • колонка H в книге Allocations.xls
  • есть набор критериев
  • формула должна быть помещена в клетке только в том случае, соответствующей ячейки в колонке H матчей любой из этих критериев.

Рабочий код:

Sub BlockAllocationsVlookupAll() 

    Dim x As Long 
    Dim lastrow As Long 
    Dim searchCriterias As String 
    Dim wb As Workbook 
    Dim ws As Worksheet 

    'specify correct path to your workbook 
    Set wb = Workbooks.Open("C:\Allocations.xls") 
    'If workbook is already opened use next line 
    'Set wb = Workbooks("Allocations.xls") 
    Set ws = wb.Worksheets("Current Day") 

    searchCriterias = "|OLY|SVC|SVC-PRO|SVC-QUO|EUR|EUR-PRO|EUR-QUO|" 

    With ws 
     lastrow = .Cells(.Rows.Count, "H").End(xlUp).Row 

     For x = 4 To lastrow 
      If InStr(1, searchCriterias, "|" & .Range("H" & x) & "|") > 0 Then 
       .Range("I" & x).Formula = "=VLOOKUP(A" & x & ",'[001 - Allocations - Blocks.xls]CurrentDayAll'!$A:$I,9,FALSE)" 
      End If 
     Next 
    End With 

    'Comment next line if you don't want to close wb 
    wb.Close (True) 
    Set wb = Nothing 
End Sub 
+0

Спасибо за кодирование выше, но будет это только взгляд на Oly, а не другие два (OLY - QUO & OLY - PRO) – TkdKidSnake

+0

как я это вижу также должен работать с OLY - QUO и OLY - PRO (так как OLY - подстрока трианговых строк). 'If ​​InStr (1, .Range (" H "& x)," OLY ")> 0 Тогда' выглядит, если 'range (" H "& x)' ** содержит ** OLY. Btw, если вам это не нравится, измените «If InStr (1, .Range (« H »& x),« OLY »)> 0 Then' to' If InStr (1, .Range («H» & x), «OLY») + InStr (1, .Range («H» & x), «OLY - QUO») + InStr (1, .Range («H» & x), «OLY - PRO»)> 0 Затем ' –

+0

в основном, если ячейка содержит OLY - QUO или OLY - PRO, это также означает, что ячейка содержит OLY. Итак, все, что вам нужно, это проверить, содержит ли ячейка OLY. –

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