|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.01.2013, 23:30 | #1 | |
Пользователь
Регистрация: 23.01.2013
Сообщений: 10
|
оптимизировать код
Здравствуйте!
Две проблемы с кодом: 1) Слишком медленно работает; 2) Невозможно добавить условий. Пожалуйста помогите оптимизировать. Цитата:
|
|
25.01.2013, 02:00 | #2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Вы бы лучше файл с данными и кодом приложили. И рассказали, что из чего нужно получить.
webmoney: E265281470651 Z422237915069 R418926282008
|
25.01.2013, 05:57 | #3 |
Пользователь
Регистрация: 23.01.2013
Сообщений: 10
|
если хотя бы одно из условий, указанных в теле макроса, выполняется то в столбец С выводится слово "ошибка", если не выполняется то - "ОК"
|
25.01.2013, 10:07 | #4 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,531
|
Цитата:
Код:
Код:
заменить or_ на последовательность if then else if .... end if Код:
правда этот путь сложно связать с Цитата:
выделенное при желаниие можно свернуть в цикл.( для реализации п 2)
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 25.01.2013 в 10:15. |
||
25.01.2013, 11:05 | #5 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Далее - заменяем на каждом шаге цикла на переменные все
InStr(rr, "ххх" ) > 0 InStr(rr, "трикот") > 0 Получим 6 уже вычисленных условий. Причём эти переменные могут быть boolean и вычисляться при первом их вызове - ведь не всегда придётся вычислять их все на каждом шаге. Далее вместо or ставим select case true, вместо and ставим вложенные if-then-end if (уже выше сказано), но думаю эти проверки нужно вынести в отдельные функции (раньше с такой вложенностью кажется не сталкивался, поэтому сейчас придумал так - может есть способ попроще?). Код:
Что получим - вместо вычисления на каждом шаге всей этой кучи действий полностью, получаем выполнение сравнений уже готовых условий только до первого да/нет. А если строк много, то ещё дополнительно работаем с массивом, а не с листом (т.е. сперва берём данные в массив, и затем уже работаем с ним). Ну и добавлять условия нет проблем - добавляем case и функцию с условиями.
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 25.01.2013 в 11:15. |
25.01.2013, 11:12 | #6 |
Старожил
Регистрация: 08.02.2012
Сообщений: 2,173
|
я бы сделал Select Case по значениям из
Код:
Код:
Правильно поставленная задача - три четверти решения.
|
25.01.2013, 11:33 | #7 |
Участник клуба
Регистрация: 17.07.2009
Сообщений: 1,088
|
Использование маски может и поможет визуально, но оно гораздо медленнее, чем InStr. Поэтому я бы без необходимости его не использовал.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru |
25.01.2013, 11:51 | #8 |
Старожил
Регистрация: 08.02.2012
Сообщений: 2,173
|
при варианте типа:
Код:
Правильно поставленная задача - три четверти решения.
|
25.01.2013, 13:03 | #9 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Что ещё по алгоритму - быстрее будет так:
Код:
Только на этом разница по скорости в 3 раза (на примере с одним не ОК ): 0.3125 0.921875
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 25.01.2013 в 13:07. |
25.01.2013, 13:16 | #10 |
Участник клуба
Регистрация: 17.07.2009
Сообщений: 1,088
|
Без Like тоже нормально ведь работает:
Код:
Чем же здесь Like может сильно помочь? Мне только этот момент интересен. Select Case - полностью согласен, т.к. гораздо нагляднее. Самое главное, что здесь вообще лишнее - WorksheetFunction.And. Ведь в VBA есть встроенный оператор And - почему бы его не использовать? Отсутствие обращения к объектной модели Excel ускорит в разы. Можно как-то так облагородить: Код:
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Оптимизировать код | strannick | Microsoft Office Excel | 9 | 14.11.2012 00:59 |
Оптимизировать код | satka | Microsoft Office Access | 2 | 01.12.2011 14:36 |
Оптимизировать код) | Pein95 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 11.11.2011 18:42 |
Оптимизировать код. | Манжосов Денис :) | Общие вопросы Delphi | 1 | 20.10.2008 19:06 |
Оптимизировать код | NeiL | Помощь студентам | 2 | 21.02.2008 08:57 |