powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как оптимизировать данный код? Копирование данных
3 сообщений из 53, страница 3 из 3
Как оптимизировать данный код? Копирование данных
    #36743430
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот последняя версия со всеми сервис-паками
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Sub МесяцHUGO3()

Dim a(), b(), c()
Dim iLastrow As Long, iLastrowSvod As Long, i As Long, ii As Long, x As Long
Dim tm
tm = Timer
Dim bStart As Long
Dim bCount As Long
Dim aStart As Long
Dim aCount As Long

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
 
 iLastrow = Sheets( 2 ).Cells(Rows.Count,  1 ).End(xlUp).Row
 iLastrowSvod = Sheets( 1 ).Cells(Rows.Count,  1 ).End(xlUp).Row
 a = Range(Sheets( 2 ).Cells( 2 ,  1 ), Sheets( 2 ).Cells(iLastrow,  1 ))
 b = Range(Sheets( 1 ).Cells( 3 ,  1 ), Sheets( 1 ).Cells(iLastrowSvod,  23 ))
 
ReDim c( 1  To iLastrow -  1 ,  1  To  21 )

bStart = LBound(b)
bCount = UBound(b)
aStart = LBound(a)
aCount = UBound(a)

For i = aStart To aCount
For ii = bStart To bCount
If a(i,  1 ) = b(ii,  1 ) Then
    For x =  1  To  21 
    c(i, x) = b(ii, x +  1 )
    Next
    Exit For
End If
Next
Next
Range(Sheets( 2 ).Cells( 2 ,  3 ), Sheets( 2 ).Cells(iLastrow,  23 )) = c

tm = Timer - tm
MsgBox tm
'Debug.Print tm
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
Как оптимизировать данный код? Копирование данных
    #36743490
snap2111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
Последний код побил все рекорды! С 40 мин. (мой код) до 5,5 сек Hugo!
Браво!
P.S. Если не сложно можно прокомментировать хотя бы основные шаги, а то много нового )))
...
Рейтинг: 0 / 0
Как оптимизировать данный код? Копирование данных
    #36743781
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
snap2111, здорово.
Коротко - я это описал в первом посте
Читаем оба диапазона в массивы (за один приём каждый), создаём третий массив, пока пустой.
Затем сравниваем массивы по ID. Здесь так же, как и у вас, два цикла, но не по листам, а по массивам. Вот в этом и вся основная разница.
Если есть совпадения - перегружаем данные в третий массив в соотв. элемент.
В конце третий массив выгружаем на лист, за один приём.
...
Рейтинг: 0 / 0
3 сообщений из 53, страница 3 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как оптимизировать данный код? Копирование данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]