powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ускорить цикл
11 сообщений из 11, страница 1 из 1
ускорить цикл
    #36882478
SNikolai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть ли возможность ускорить цикл?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
For a =  3  To fr4
   For b =  1  To fr5
       For c =  15  To  40 
         For d =  74  To  80  Step  2 
               If xlSheet.Cells(a,  14 ) = xlSheet.Cells(b,  68 ) And xlSheet.Cells( 2 , c) = xlSheet.Cells(b,  70 ) And xlSheet.Cells(a,  9 ) = xlSheet.Cells(b, d) Then xlSheet.Cells(b, d +  1 ).Copy: xlSheet.Cells(a, c).Select: xlApp.ActiveSheet.Paste: 'xlApp.ActiveSheet.Paste
         Next d
       Next c
   Next b
Next a
...
Рейтинг: 0 / 0
ускорить цикл
    #36882571
Thermik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SNikolai,

так быстрее?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
With xlSheet
For a =  3  To fr4
   For b =  1  To fr5
       For c =  15  To  40 
         For d =  74  To  80  Step  2 
               If .Cells(a,  14 ) = .Cells(b,  68 ) And .Cells( 2 , c) = .Cells(b,  70 ) And .Cells(a,  9 ) = .Cells(b, d) Then .Cells(b, d +  1 ).Copy: .Cells(a, c).Select: xlApp.ActiveSheet.Paste: 'xlApp.ActiveSheet.Paste
         Next d
       Next c
   Next b
Next a
end with
...
Рейтинг: 0 / 0
ускорить цикл
    #36882652
SNikolai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет,так дольше
...
Рейтинг: 0 / 0
ускорить цикл
    #36882724
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее, здесь торможение не из-за структуры, а из-за некорректного использования команд...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Application.ScreenUpdating = False
With xlSheet
For a =  3  To fr4
   For b =  1  To fr5
       For c =  15  To  40 
         For d =  74  To  80  Step  2 
               If .Cells(a,  14 ) = .Cells(b,  68 ) And .Cells( 2 , c) = .Cells(b,  70 ) And .Cells(a,  9 ) = .Cells(b, d) Then .Cells(b, d +  1 ).Copy Destination:=.Cells(a, c)
         Next d
       Next c
   Next b
Next a
end with
Application.ScreenUpdating = True
...
Рейтинг: 0 / 0
ускорить цикл
    #36882831
SNikolai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ничегон не изменилось(( время выполнения цикла 1 м.45 сек.
...
Рейтинг: 0 / 0
ускорить цикл
    #36882998
SimpleC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SNikolai, вроде Foreach быстрее работает
...
Рейтинг: 0 / 0
ускорить цикл
    #36883069
SNikolai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
честно говоря не пользовался им(не подскажите как переделать под него?
...
Рейтинг: 0 / 0
ускорить цикл
    #36883199
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если условие разбить?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Application.ScreenUpdating = False
With xlSheet
For b =  1  To fr5
    For a =  3  To fr4
       if Cells(a,  14 ) = .Cells(b,  68 ) then
           For c =  15  To  40 
               if .Cells( 2 , c) = .Cells(b,  70 ) then
                   For d =  74  To  80  Step  2 
                       If .Cells(a,  9 ) = .Cells(b, d) Then .Cells(b, d +  1 ).Copy Destination:=.Cells(a, c)
                   Next d
               end if
           Next c
       end if
    Next a
Next b
end with
Application.ScreenUpdating = True
...
Рейтинг: 0 / 0
ускорить цикл
    #36883232
SNikolai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да!спасибо.
время выполнения цикла 4 сек.
...
Рейтинг: 0 / 0
ускорить цикл
    #36883627
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

тогда и
...
Рейтинг: 0 / 0
ускорить цикл
    #36883638
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SNikolai,

тогда по старым рекомендациям (не надеась на оптимизатор)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
dim a9
For b =  1  To fr5
    For a =  3  To fr4
       a9=.cells(a, 9 ) ''''''''''
       if Cells(a,  14 ) = .Cells(b,  68 ) then
           For c =  15  To  40 
               if .Cells( 2 , c) = .Cells(b,  70 ) then
                   For d =  74  To  80  Step  2 
                       If a9=.Cells(b, d) Then .Cells(b, d +  1 ).Copy Destination:=.Cells(a, c)
..............
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ускорить цикл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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