2014-09-22 3 views
0

Я пытаюсь получить макрос, который берет 2 листа из книги и сравнивает 2 разных столбца данных.Compare 2 Sheets of Data (Macro)

  1. Найти номер в «Цена Отклонения» D2: D999999 и попытаться сопоставить его «Финансы All» E2: E999999

  2. Если они совпадают, то взять соответствующие данные из «Финансы All '! G2: G999999 и вставьте его в соответствующие строки в «Оценки цены»! U2: U999999.

Разъяснение

Я хочу посмотреть на значение в ячейке в «Цена Отклонения», Column «D», строка «2», тогда смотрите, если есть совпадение в «Финансы Все» столбец «E» (просмотрите весь столбец для соответствия).

Если есть, я хочу вставить данные из соответствующей строки совпадения из «Финансировать все», Столбец «G» в «Параметр цены», Столбец «U», «Строка 2» (это та же строка из исходной ячейки, с которой мы искали совпадение).

Это нужно будет обрабатывать для каждой строки после «Параметр цены», столбец «D».



Ниже то, что я до сих пор - Пожалуйста подправить & правильно по мере необходимости.

Sub Price_Variation_Finance_Match() 
    Dim CompareRange As Variant, x As Variant, y As Variant 
    ' Set CompareRange equal to the range to which you will 
    ' compare the selection. 
    Set CompareRange = Range("'Finance All'!E2:E999999") 
    ' NOTE: If the compare range is located on another workbook 
    ' or worksheet, use the following syntax. 
    ' Set CompareRange = Workbooks("Daily Pricing (5)"). _  
    ' Worksheets("Price Variances", "Finance All").Range("E2:E999999") 
' Loop through each cell in the selection and compare it to 
' each cell in CompareRange. 
For Each x In Selection 
    For Each y In CompareRange 
     If x = y Then x.Offset(0, 17) = x 
    Next y 
Next x 

End Sub
Я считаю, что моя проблема заключается в последний 'х' в "если х = у, то x.Offset (0, 17) = х"

Ниже Оригинал Macro

Sub Find_Matches() 
Dim CompareRange As Variant, x As Variant, y As Variant 
' Set CompareRange equal to the range to which you will 
' compare the selection. 
Set CompareRange = Range("C1:C5") 
' NOTE: If the compare range is located on another workbook 
' or worksheet, use the following syntax. 
' Set CompareRange = Workbooks("Book2"). _ 
' Worksheets("Sheet2").Range("C1:C5") 
' 
' Loop through each cell in the selection and compare it to 
' each cell in CompareRange. 
For Each x In Selection 
    For Each y In CompareRange 
     If x = y Then x.Offset(0, 1) = x 
    Next y 
Next x 
End Sub 
+0

какая у вас проблема? каков макрос прямо сейчас? Вы не получите никакой помощи на этом сайте, если попросите людей «просто исправить», но можете получить полезную помощь в попытке выявить проблему или проблему. – Maciej

+0

Моя проблема в том, что у меня нет работы, и я не могу найти исправления. И макрос прямо сейчас размещен выше. Я подошел к концу своей веревки с точки зрения ее работы - макрос работает, но данные не перемещаются. – Bcarr91

+0

Каково значение x на этой строке, которое, по вашему мнению, является причиной проблемы? не заменяется ли оно тем же значением, что и в ячейке? Пробовали ли вы установить x.Offset (0,17) на некоторое статическое значение? Колонна U заполнена чем-нибудь? Что содержит Отбор? – Maciej

ответ

1

Ваш оператор If возвращает исходное значение x. Я думаю, что вместо этого, вы хотели бы

If x = y Then x.Offset(0, 17) = y.Offset(0, 2) 

Это дает значение, найденное в столбце у двух столбцов справа от поиска.

Обратите внимание, что этот макрос ОЧЕНЬ медленный, поскольку он циклически перемещается по каждой ячейке по y, даже если он уже нашел совпадение. Если вы хотите, первый найденный, то я предлагаю чейнинга вашего для петли на

For Each x In Selection 
    For Each y In CompareRange 
     If x = y Then 
      x.Offset(0, 17) = y.Offset(0, 2) 
      Exit For 
     End If 
    Next y 
Next x 

Или еще лучше, просто использовать ВПР, который будет делать всю эту функцию для вас приятно.

+0

ОК - Нужно ли определять «x» и «y»? -If so - Как определить между двумя листами? – Bcarr91

+0

Просто замените оператор If выше, и он будет работать. – APrough