Всем привет!
Есть задача перенести данные из одной таблицы в другую по условию (можно сказать то же самое что ВПР)
На данный момент код работает следующим образом: ищу совпадения по первому столбцу с помощью вложенных циклов.
На малом объеме данных это вполне рабочая схема, но в действительности у меня 12 тысяч строк в первой таблице, и 500 тысяч строк во второй. Очевидно, что это работает очень долго.
Есть какие то способы уйти от вложенных циклов?
Слышал, что использование коллекций или словарей куда быстрее, но как реализовать конкретно в этой задаче, я не понимаю
Очень надеюсь на вашу помощь)
Есть задача перенести данные из одной таблицы в другую по условию (можно сказать то же самое что ВПР)
На данный момент код работает следующим образом: ищу совпадения по первому столбцу с помощью вложенных циклов.
На малом объеме данных это вполне рабочая схема, но в действительности у меня 12 тысяч строк в первой таблице, и 500 тысяч строк во второй. Очевидно, что это работает очень долго.
Есть какие то способы уйти от вложенных циклов?
Слышал, что использование коллекций или словарей куда быстрее, но как реализовать конкретно в этой задаче, я не понимаю
Очень надеюсь на вашу помощь)
Код |
---|
Sub Qft() Dim arr1 As Variant Dim arr2 As Variant arr1 = ThisWorkbook.Worksheets("Лист1").UsedRange 'массив, куда нужно внести данные arr2 = ThisWorkbook.Worksheets("Лист2").UsedRange 'массив, из которого нужно забрать данные Dim i As Long, g As Long For i = 2 To UBound(arr1) For g = 2 To UBound(arr2) If arr1(i, 1) = arr2(g, 1) Then arr1(i, 5) = arr2(g, 2) arr1(i, 9) = arr2(g, 3) arr1(i, 11) = arr2(g, 4) End If Next g Next i Sheets("Лист1").Cells(1, 1).Resize(UBound(arr1), UBound(arr1, 2)) = arr1 End Sub |