2015-11-04 2 views
0

На вкладке Paste New IDs Here столбец A, начиная со строки 2, имеет список уникальных идентификаторов, используемых для идентификации человека. Тридцать уникальных идентификационных номеров.Копирование строки в новую таблицу на основе уникального идентификатора

На вкладке Raw Export есть куча необработанных данных, где столбец B, начиная со строки 2, имеет все ID для более 200 человек.

Я помещаю список идентификационных номеров в Paste New IDs Here и вытягивая всю строку, связанную с этим идентификационным номером, в Test. Поэтому только строки, которые имеют идентификационные номера, указанные на листе Paste New IDs Here, будут скопированы в Test.

Производится только десять рядов (из тридцати).

Нужна ли мне другая петля?

Sub ExtractID() 

Set i = Sheets("Raw Export") 
Set e = Sheets("Test") 
Set p = Sheets("Paste New IDs Here") 

Dim d 
Dim j 
Dim k 

d = 1 
j = 2 
k = 2 

Do Until IsEmpty(i.Range("B" & j)) 

If i.Range("B" & j) = p.Range("A" & k) Then 
d = d + 1 
k = k + 1 
e.Rows(d).Value = i.Rows(j).Value 


End If 
j = j + 1 

Loop 
End Sub 
+0

Вы можете сделать это очень эффективным способом только с Excel. С помощью некоторой функции vlookup вы можете настроить лист, в котором, как только вы вставляете идентификаторы в определенном столбце, Excel извлекает соответствующие данные и отображает их. И когда вы удаляете идентификаторы, соответствующие данные больше не отображаются. Это то, что вы хотите? –

+0

@ Louis.B Это была моя первоначальная цель, но, потратив много времени на исследования, я был убежден, что использование VBA было единственным способом. Я работал с VBA, но мне все же хотелось бы изучить этот вариант. Любая идея о том, как я могу использовать VLOOKUP для копирования целой строки? – user2491448

+0

Идея состоит не в том, чтобы «копировать» всю строку с помощью «vlookup», а вместо «vlookup» для извлечения данных в каждом столбце, который вы хотите. Чтобы дать вам представление, что-то вроде этого должно работать: '= vlookup (« Вставить новые идентификаторы здесь »!« Строка соответствия »,« Необработанный экспорт »! DataSet, соответствующий столбец). Вы даже можете добавить соответствующее условие if для отображения ничего, если vlookup вернет некоторую ошибку. Скажите мне, если вам нужно больше деталей, я могу добавить ответ об этом. –

ответ

0

Вам нужно добавить внутреннюю петлю над к:

Do Until IsEmpty(i.Range("B" & j))  
    Do Until isEmpty(p.Range("A"&k)) 
    If i.Range("B" & j) = p.Range("A" & k) Then 
     d = d + 1   
     e.Rows(d).Value = i.Rows(j).Value 
    End If 
    k = k + 1 
    Loop 
    k=2 
    j = j + 1  
Loop 
+0

Это сработало! Огромное спасибо. – user2491448

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