Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2009, 10:21   #1
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию зависит ли скорость работы макроса от порядка условий?

в коде прописан перебор по нескольким условиям - например так:

Код:
If a(l, 1) = h(j, 1) And g(1, k) = 1 And f(1, k) = b(l, 1) Then
если условие 1 отсеивает 50% значений а условие 3 90% значений - если их поменять местами быстрее работать будет??

или если условие 2 не выполянется чаще чем условие 1 если его поставить на первое место - будет ли работать быстрее?
kievlyanin вне форума Ответить с цитированием
Старый 29.05.2009, 11:21   #2
kolebatel
 
Регистрация: 11.06.2008
Сообщений: 7
По умолчанию

Думаю, что не будет. Вот если будут вложенные if, то тогда наверняка будет тормозиться ( на большом объеме данных), а условия в одном if проверяются одновременно ( судя по Вашему коду).
kolebatel вне форума Ответить с цитированием
Старый 29.05.2009, 11:46   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Думаю, что не будет. Вот если будут вложенные if, то тогда наверняка будет тормозиться
Все с точностью до "наоборот".
Если условие оператора If задано через And, Or и т.п., то проверяются все условия, не зависимо от того, выполняется предыдущее условие или нет. В результате, и код медленнее, и ошибки возможны. Так, например, в строке
Код:
If IsNumeric(x) And x + 5 > 10 Then...
при текстовом значении x возникнет ошибка, не смотря на то, что мы сначала проверяем, что x есть число.
Вывод: либо использовать конструкцию Select Case...Case...End Select (если, конечно, это возможно), либо вложенные операторы If.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 29.05.2009, 11:50   #4
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию

Цитата:
Сообщение от kolebatel Посмотреть сообщение
Думаю, что не будет. Вот если будут вложенные if, то тогда наверняка будет тормозиться ( на большом объеме данных), а условия в одном if проверяются одновременно ( судя по Вашему коду).
а точно одновременно?
мне так -для общего понимания как оно работает.
kievlyanin вне форума Ответить с цитированием
Старый 29.05.2009, 11:57   #5
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию

2 SAS888

а вложенные If сами по себе не замедляют работу кода?? .. т.к. больше строчек, операций...
kievlyanin вне форума Ответить с цитированием
Старый 29.05.2009, 12:00   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Как правило, ускоряют (см пост №3). Если не выполнилось первое условие, то, во-первых, остальные вообще не проверяются, во-вторых, вложенные строки кода не выполняются.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 29.05.2009 в 12:03.
SAS888 вне форума Ответить с цитированием
Старый 29.05.2009, 12:03   #7
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию

ок... спасибо .. ща попробую
kievlyanin вне форума Ответить с цитированием
Старый 29.05.2009, 12:15   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Только расставьте условия (вложения If) в нужном порядке. Т.е. самое внешнее условие должно выполняться наиболее редко. И т.д.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 29.05.2009, 12:16   #9
kolebatel
 
Регистрация: 11.06.2008
Сообщений: 7
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Если условие оператора If задано через And, Or и т.п., то проверяются все условия, не зависимо от того, выполняется предыдущее условие или нет.
То есть порядок условий не существенен?! Так я вроде это и написал.
Вывод : я бы использовал вложенные if , причем так, чтобы внешний if выполнялся как можно реже ( чтобы реже заходить во внутренние условия). Тогда должен работать быстро.
ну а если всех возможных условий немного, то лучше через case - самое оно!

Последний раз редактировалось kolebatel; 29.05.2009 в 12:21.
kolebatel вне форума Ответить с цитированием
Старый 29.05.2009, 12:30   #10
kievlyanin
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 110
По умолчанию

уу-у-у-у блин... короче .. эффект следующий .. до того код выполнялся 12 минут. после - 1,5 ...

что бы еще оптимизировать
kievlyanin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Визуализация работы макроса Gawwws Microsoft Office Excel 24 01.09.2010 18:16
прерывание работы макроса zander Microsoft Office Excel 3 21.05.2009 21:12
Log работы макроса valerij Microsoft Office Excel 3 03.03.2009 00:04
Визуализация работы макроса zander Microsoft Office Excel 7 15.02.2009 01:09
Запуск макроса с параметрами из другого макроса Saladin Microsoft Office Excel 2 19.01.2009 09:43