2014-12-30 2 views
0

Я очень новичок в макросах Excel и VBA, любезно помогите мне , пожалуйста, с моей ситуацией ниже. Вот ситуация, у меня есть два листа (sheet1 и лист 2) в sheet1 есть два столбца имя и номер, а в sheet2 я есть номера вдоль его другой информации, такой как дата, зарядки и т.д.Excel 2010 Макро сравнить два столбца для поиска совпадающего значения

Лист 1

No Name PhoneNumber

1 Боб 7254

2 Cristin 5468

3 Luara 1234

не

Sheet2

Нет PhoneNumber Дата Заряженные Имя

1 1145 12/30/2014 2 $

2 7254 11/26/2014 3 $

3 2365 3/9/2014 7 $

4 5468 10/10/2014

5 1234 3/11/2014

То, что я хочу, это сравнить столбец PhoneNumber листа2 (столбец B) с столбцом столбца PhoneNumber листа 1 (столбец C) и, если найдено совпадение, тогда скопируйте имя (столбец B) из Sheet1 в столбец Name столбца sheet2 (E). Если нет совпадения, столбец имен на листе2 должен быть пустым. не

я искал и нашел ниже код и изменен немного, но я не уверен, является ли оно правильным или нет:

Sub test() 

    Dim rng1 As Range, rng2 As Range, i As Integer, j As Integer 
     For i = 1 To Sheets("Sheet2").Range("B" & Rows.Count).End(xlUp).Row 
      Set rng1 = Sheets("Sheet2").Range("B" & i) 
      For j = 1 To Sheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row 
       Set rng2 = Sheets("Sheet1").Range("C" & j) 
       If rng1.Value = rng2.Value Then 
        Range("B2:B" & TotalRows).Copy Destination:=Sheets("Sheet2").Range("E2") 
       End If 

      Set rng2 = Nothing 
     Next j 
     Set rng1 = Nothing 
    Next i 
End Sub 

Пожалуйста, помогите мне как раз так коротка для моего проекта, и я высоко оценим вашу помощь в этом отношении.

+0

Почему вы просто не используете функцию VLOOKUP для этого, в вашем случае это будет намного проще. Поиск по GOOGLE связан с этим. –

+0

Спасибо Paresh за быстрый ответ, я знаю, что vlookup будет намного проще, но требование использует макрос: (если у вас есть идея, я был бы признателен за вашу помощь! – Hardworker

+0

Вы можете использовать функцию VLOOKUP в своем макросе, а затем просто заполните формулу VLOOKUP для остальную часть ячеек. Вы можете использовать Application.VLOOKUP или Application.WorksheetFunction.VLOOKUP –

ответ

2

Похоже, вы были почти там. Однако ваша копировальная линия нуждается в небольшой настройке. В приведенном ниже примере я добавил дополнительную переменную с именем rngName, чтобы сохранить диапазон имени, которое нужно скопировать, и присвоить ему значение в цикле for j. если числа совпадают (т. е. rng1.value = rng2.value), он скопирует диапазон, содержащий имя, в соответствующую строку на листе 2. Обратите внимание, что я использовал .Range («E» & i) для диапазона копирования. Диапазон копирования в вашем примере всегда будет отбрасывать имя в той же ячейке, что и всегда, для «E2». Кроме того, у вас есть переменная с именем TotalRows, которая не имеет значения. Должно быть, это означало что-то в исходном коде, из которого вы его скопировали, поэтому я тоже избавился от этого. Попробуйте это и дайте мне знать, как это работает для вас.

Sub test() 
Dim rng1 As Range, rng2 As Range, rngName As Range, i As Integer, j As Integer 
    For i = 1 To Sheets("Sheet2").Range("B" & Rows.Count).End(xlUp).Row 
     Set rng1 = Sheets("Sheet2").Range("B" & i) 
     For j = 1 To Sheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row 
      Set rng2 = Sheets("Sheet1").Range("C" & j) 
      Set rngName = Sheets("Sheet1").Range("B" & j) 
      If rng1.Value = rng2.Value Then 
       rngName.Copy Destination:=Worksheets("Sheet2").Range("E" & i) 
      End If 

     Set rng2 = Nothing 
    Next j 
    Set rng1 = Nothing 
Next i 
End Sub 
+0

Спасибо @Edward за помощь, просто нужно две коррекции, остальные отлично работают.Каждый цикл должен начинаться с 2-го значения, чтобы предотвратить выбор заголовков, и нам нужно выйти из второго цикла, как только значения rng1 & rng2 будут такими же, чтобы первый цикл продолжался следующим образом: Если rng1.Value = rng2.Value Then rngName.Copy Направление: = Рабочие листы («Лист2»). Диапазон («E» & i) Выход для завершения Если – Hardworker

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