Такая дилемма: Есть два листа, с набором данных. Необходимо на Лист1, при условии совпадения двух столбцов, притянуть в третий столбец данные с Листа 2. Сейчас задача решается формулами через массив, но на больших базах считает экселина чудовищно долго. Как бы это дело оптимизировать....
Попробовал написать скрипт через find, но он у меня во-первых не работает (я так подозреваю что из-за куска fcell.Row), во-вторых он ищет только до первого совпадения индекса, а надо бы что бы при несовпадении второго условия он продолжал поиск.
[vba]
Код
Sub Get_() r = Cells(Rows.Count, 1).End(xlUp).Row For i = r To 2 Step -1 'Находим индекс на листе-справочнике (Лист2) fcell = Worksheets("Лист2").Range("B:B").Find(Cells(i, 2)) 'Если ФИО по индексу так же совпадает - копируем нужные данные с листа 2 If Worksheets("Лист1").Cells(i, 1) = Worksheets("Лист2").Cells(fcell.Row, 1) Then Worksheets("Лист2").Cells(fcell.Row, 1).Copy Worksheets("Лист1").Cells(i, 3) End If
Next i
End Sub
[/vba]
Доброго дня форумчанам!
Такая дилемма: Есть два листа, с набором данных. Необходимо на Лист1, при условии совпадения двух столбцов, притянуть в третий столбец данные с Листа 2. Сейчас задача решается формулами через массив, но на больших базах считает экселина чудовищно долго. Как бы это дело оптимизировать....
Попробовал написать скрипт через find, но он у меня во-первых не работает (я так подозреваю что из-за куска fcell.Row), во-вторых он ищет только до первого совпадения индекса, а надо бы что бы при несовпадении второго условия он продолжал поиск.
[vba]
Код
Sub Get_() r = Cells(Rows.Count, 1).End(xlUp).Row For i = r To 2 Step -1 'Находим индекс на листе-справочнике (Лист2) fcell = Worksheets("Лист2").Range("B:B").Find(Cells(i, 2)) 'Если ФИО по индексу так же совпадает - копируем нужные данные с листа 2 If Worksheets("Лист1").Cells(i, 1) = Worksheets("Лист2").Cells(fcell.Row, 1) Then Worksheets("Лист2").Cells(fcell.Row, 1).Copy Worksheets("Лист1").Cells(i, 3) End If