|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.04.2011, 20:47 | #21 |
Пользователь
Регистрация: 28.02.2011
Сообщений: 42
|
Я именно так и понял и в предыдущем посте писал, что пробовал выносить объявление циклов перед началом цикла - это не помогает. Щас вот опять попробовал - "0" везде
|
02.04.2011, 22:01 | #22 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Я пока в код не вникал, но смотрю, что у Вас массивы вообще и не используются. Используется одно текущее значение сразу после занесения, ну и ещё одно соседнее:
Код:
Код:
Код:
Вообще конечно на массивах было бы быстрее и лучше, но это нужно переделывать алгоритм - заносить сразу всё анализируемое в массивы, анализировать в памяти и класть результат в другой массив, потом этот массив выгрузить на лист. Расскажите словами, что нужно из чего получить - вычитывать это из кода лениво...
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 02.04.2011 в 22:15. |
03.04.2011, 01:03 | #23 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Вот например так - получаем три последних столбца.
Для сравнения выгружаю в [cz2 : db2]. В цикле сравнение с last из-за того, что иначе ошибка в конце цикла, когда значение i + 1 выходит за предел массива. Код отрабатывает за 0,06 секунды. Код:
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 03.04.2011 в 01:23. Причина: Пускал сперва цикл Step 2 - но так нельзя, две подряд единицы не ставятся... |
03.04.2011, 17:42 | #24 |
Пользователь
Регистрация: 28.02.2011
Сообщений: 42
|
Спасибо за ответ, щас попробую объяснить - на первом этапе расчет листа проиведен формулами (без использования vba), на втором этапе (когда я начал изучать vba) был написан данный код, который не раздувает файл данными и расчитывает именно столько строк - сколько нужно, но опять не задача - это расчет не внутри кода, а на рабочих листах, поэтому собственно и понадобилась оптимизация уже ранее написанного, а это и есть третий этап. Хорошо конечно когда ты наделен сразу определенными знаниями и можно обойтись без первых двух этапов - но не в моем "пока что" случае.
Весь этот пост и затеян для того, чтобы понять суть расчетов формулами массивов и отобраченнии действительных значений результатов вычеслений по окончании кода на рабочий лист. Вы не много не правы по поводу не использовании мной массивов - на данном этапе "да", этого пока не сильно то и заметно. Все дело в том, что сами поймите, тяжело переделывать то, что изначально написанно не так - поэтому стратегия моей работы над переделкой этого кода следующая: хотелось бы понять, как правильно программно и синтаксически оформить значения каждого столбца расчитанного через цикл в значения массивов (для того чтобы не запутаться на этом этапе - решил давать таким массивам индекс равный номеру столбца, рассчитанного формулой через цикл: например значения Cells(i + 1, 6) должны соответствовать массиву M6, Cells(i + 1, 7) массиву M7 и т.д.). Далее что касается в коде срок типа Cells(i + 1, 100) = M6(i) - это временные строки, делаю пока их лишь для того, чтобы на лесте визуально сравнивать значения массивов со значениями формул с циклами (опять же, только ради того, чтобы не запутаться), после переделки кода - такие строки сразу же уберу. Ну и следовательно сами строки цикла формул пока не убираю - это чтобы было пока с чем работать, когда увижу, что созданные циклы им идентичны - строки типа Cells(i + 1, 7) = "=MAX(RC[-5]:RC[-2])" - с кода так же будут удалены. Вот теперь далее, получив массивы М6 и М7 (которые образуются от работы со значениями в ячеках), следующий массив М8 уже призван работать со значениями массива М7. И так далее, пока не перелопачу все нужные массивы. Работа конечно предстоит муторная и от вас я только хочу в нужный момент помочь мне с синтаксисами или полезным замечанием. Я старался объяснить, как мог. Сейчас попробую использовать новую информацию любезно предоставленную вами, позже отпишусь... |
03.04.2011, 18:40 | #25 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Примерно понятно.
Непонятно только, что именно нужно получить? Если все те данные, которые высчитаны формулами - тогда я пас, такую рутину прописывать не буду. Но если Вы поймёте, как получен массив b с единичками в моём коде - тогда Вы сами можете создать ещё сколько нужно массивов, которые заполните нужными данными на основе анализа массива а, и которые в конце можно аналогично выгрузить на лист. Или, если нужно например подсчитать общее количество единичек, или получить список моментов, где стоят эти единички - тогда и это можно сделать внутри кода, и выгрузить на лист (или например в файл отчёта) уже только именно нужные данные.
webmoney: E265281470651 Z422237915069 R418926282008
|
04.04.2011, 21:27 | #26 |
Пользователь
Регистрация: 28.02.2011
Сообщений: 42
|
А получить нужно столбец данных с названием X1 (не путать с адресом ячейки), подсвеченный красным цветом. Да понятно что никто этим не будет заниматься, хотя мне в принципе не трудно кинуть клич "накидать код за wmr" - а результат то какой? кодов то мне еще много писать, все покупать? нет, я хочу разобраться... Вот не помню, у кого подпись такую видел - что то вроде "дайте человеку рыбу и накормите его на день, научите его ловить рыбу - и на кормите на всю жизнь" -правильные слова, я и хочу "научиться ловить рыбу".
То что вы пытались до меня довести постом выше я понимаю и где когда внутри, а где выгружать тоже догадываюсь... просто спотыкаюсь пока еще, как ребенок. Спасибо вам за то, что возитесь со мной |
04.04.2011, 22:03 | #27 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Да, запутанно там всё переплетается, это вероятно только Вы сами можете правильно распутать...
Вот смотрите - Вы получили массив "a" с данными, которые построчно перебираете в цикле. Взяли первую строку (a(i, 2), a(i, 3), a(i, 4), a(i, 5)) и начинайте через If..Then получать искомое. Можно временно заносить промежуточные результаты в переменные, их сравнивать, потом их обнулять перед следующим шагом цикла. Значения массива a(i-1,n) и a(i+1,n) - это строка выше и ниже, только нужно предусмотреть, что бы не вылезти за пределы массива в начале и конце, иначе будет ошибка. Или может просто изначально массив взять чуть больше. Мне кажется, в макросе всё это прописать даже проще, чем формулами, т.к. можно пошагово всё отследить, прокомментировать для себя каждую строку, добавить ещё переменных и ветвлений, если мало простора для мысли
webmoney: E265281470651 Z422237915069 R418926282008
|
08.04.2011, 00:48 | #28 |
Пользователь
Регистрация: 28.02.2011
Сообщений: 42
|
Вроде как разобрался, расчет запихал внутрь кода - скорость возросла многократно. Во вложении выкладываю что получилось. У меня только один вопрос остался, в коде есть два момента:
Код:
Код:
Просто я этот код за один присест переписал, устал.. шарики за ролики уже, ответ где то крутится, уловить не могу. |
08.04.2011, 01:15 | #29 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Я сейчас тоже детально не въеду (поздно уже), но вот тут:
Код:
Код:
Если идти до 1, то будет ошибка в M14(i - 1), M12(i - 1), M13(i - 1) - нет таких элементов. Поэтому я в том своём коде условие вводил и при 1 это действие не делал. Ну тут можно по разному поступить, поизучайте, как лучше. И кстати On Error Resume Next не стоит 100 раз задавать, раз Вы не сбрасываете On Error GoTo 0. Хватит одного раза в начале.
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 08.04.2011 в 01:25. |
08.04.2011, 01:32 | #30 |
Пользователь
Регистрация: 28.02.2011
Сообщений: 42
|
А я вот не знал как идти снизу тут бы это очень пригодилось - я попробую, попозже, уже поздно сегодня. Кстати про On Error Resume Next я тоже запомнил. Спасибо.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как оптимизировать код C++ | slim>>> | Помощь студентам | 10 | 25.01.2011 00:05 |
Очень большой цикл, как оптимизировать? | Marsel737 | Общие вопросы Delphi | 3 | 06.09.2010 10:08 |
Как оптимизировать код Delphi | OST_K | Помощь студентам | 1 | 30.05.2010 06:59 |
Как оптимизировать плиззз | alex181264 | Microsoft Office Excel | 3 | 13.04.2009 06:27 |
как может оптимизировать в фунцию? | w1ze | Помощь студентам | 2 | 07.01.2008 23:19 |