2014-01-20 4 views
0

Я новичок в VBA и пытаюсь найти свой путь через следующий сценарий:VBA заменить индекс соответствие формулы

sheet1 с колоннами A (пункт) B (Описание) C (Цена) (это мой поиск лист)

sheet2 с теми же самыми точными столбцами (это мой лист базы данных)

то, что я хочу сделать, это: Когда я ввести код пункта в Лист1 колонке а, соответствует единственное значение из sheet2 и копировать вставить значения из столбцов B и C в лист1 для этого элемента.

Я хочу, чтобы это произошло только для активной ячейки в листе1, возможно ли это?

я надеюсь, что я был достаточно ясен вид касается

ответ

0

Добавить следующий код в Sheet1 module:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 

    On Error Resume Next 
    'if changed entire range ITEMS1' 
    If Target.Name.Name = "ITEMS1" Then 
     Dim tarRange As Range 
     Set tarRange = Application.Intersect(Range("ITEMS1"), Target) 
     If Not tarRange Is Nothing Then 
      Dim sh2 As Worksheet 
      Dim res As Range 
      Dim tarRow As Range 

      'change "Sheet2" to the sheet name that is true for you' 
      Set sh2 = ThisWorkbook.Worksheets("Sheet2") 

      For Each tarRow In tarRange.Cells 

       Set res = sh2.Range("A:A").Find(What:=tarRow.Value, LookAt:=xlWhole) 

       If res Is Nothing Then 
        tarRow.Offset(0, 1).Resize(1, 2).Value = "not found" 
        'MsgBox "There is no matching value on Sheet2" 
       Else 
        'if we found value on sheet2, than copy range B,C' 
        tarRow.Resize(1, 3).Value = res.Resize(1, 3).Value 
       End If 
      Next 
     End If 
    End If 
    Application.EnableEvents = True 
End Sub 
+1

Hi Simoco, код отлично работает !!! Большое спасибо – user3214725

+0

Привет Симоко, просто быстрый вопрос, есть ли способ освободить два слова от этого макроса? что я хочу сделать: каждый раз, когда макрос найдет слова date или item в столбце a: не делать ничего. – user3214725

+0

Я правильно вас понимаю, если мы вводим в колонку «A» слова «date» или «item», то макрос ничего не должен делать? –

1

Вы сказали, что вы хотите использовать VBA для замены, используя формулу, но вы не сказали, Зачем. VBA отлично, но я думаю, что формулы - это путь для этой конкретной работы.

Формат данных в Лист1 и Лист2 и Table1 и Table2 соответственно, то:

В Table1 колонке B, тип:

=INDEX(Table2[Description],MATCH([Item],Table2[Item],0),) 

В Table1 колонке C, тип:

=INDEX(Table2[Price],MATCH([Item],Table2[Item],0),) 

Voila

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