|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.07.2010, 20:49 | #11 |
Пользователь
Регистрация: 09.12.2008
Сообщений: 56
|
2 Hugo
Наверное было бы лучше еще и проверку через несколько If делать. В вашем случае, даже если первое условие не выполняется, два последующих все равно проверятся If a(i, 1) = b(1, k + 2) And a(i, 2) = b(r, 1) And a(i, 3) = b(r, 2) Then b(r, k + 2) = b(r, k + 2) + a(i, 5) For k = 1 To 12 For r = 2 To bb For i = 1 To aa If a(i, 1) = b(1, k + 2) then If a(i, 2) = b(r, 1) then if a(i, 3) = b(r, 2) Then b(r, k + 2) = b(r, k + 2) + a(i, 5) end if end if Next Next Next
обычно я на http://planetaexcel.ru/forum.php
|
25.07.2010, 22:16 | #12 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Да, спасибо, что-то мне и в голову не пришло А результат-то существенный, в 2 раза (напомню - анализируем и суммируем данные из 65499 рядов):
6,515625 7,34375 7,46875 7,0625 7,359375 7,46875 3,53125 3,09375 3,3125 3,3125 3,3125 3,375 P.S.Только сейчас дошло - так ведь так мы сделали ADO! На целую секунду!
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 25.07.2010 в 22:26. |
26.07.2010, 09:58 | #13 |
Форумчанин
Регистрация: 25.11.2009
Сообщений: 113
|
А если я заполняю:
Код:
Код:
|
26.07.2010, 10:33 | #14 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Ничего не понял
webmoney: E265281470651 Z422237915069 R418926282008
|
26.07.2010, 10:45 | #15 |
Форумчанин
Регистрация: 25.11.2009
Сообщений: 113
|
Приношу свои извинения.
У меня цикл для обработки столбцов с шагом, напр., 2, и определенные строки, куда ставить данные. Код:
|
26.07.2010, 11:01 | #16 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
For k = 10 to 34 Step 2 - перебираем названия месяцев
If a(i, 1) = b(1, k + 2) then - если название месяца в таблице совпадает с названием месяца из списка, т.е. надо синхронизировать элемент массива b, из которого берёте значения. Вообще так без примера трудно с уверенностью сказать, где проскакивает ошибка. Прогоните через F8 и в окне Locals смотрите, какие значения в массивах, что сравнивается и что суммируется.
webmoney: E265281470651 Z422237915069 R418926282008
|
26.07.2010, 17:54 | #17 |
Форумчанин
Регистрация: 25.11.2009
Сообщений: 113
|
Вот, что у меня получилось. Не пойму, в чем дело.
И еще, не пойму как сделать строки, напр, 22, 24, 27. |
26.07.2010, 20:09 | #18 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Там почти уже сошлось, основная ошибка была в расположении выгрузки массива. В архиве есть скрин сравнения кодов, если интересно.
Да, и k надо перебирать с 1, там ведь в начале халаты/перчатки в этом массиве надо сравнить Но если делать, как я в начале, на 3-4 массивах, тогда проще алгоритм построить - месяцы в одном массиве, халаты/перчатки в другом, выгружаем в третий. Поанализируйте тот код. Насчёт "строки 22,24,27" - вот весь код. Добавил массив значений цикла rrng, как у Вас выше было. Ещё пришлось заменить определение r. Строки в явном виде не указываются, указываются элементы массива, в которых содержатся значения этих строк. А вообще наверное это можно и формулами сделать. На таком объёме сработают, вот на 65500 будет тормозить. Но я не формулист Код:
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 26.07.2010 в 20:39. |
27.07.2010, 04:59 | #19 |
Форумчанин
Регистрация: 25.11.2009
Сообщений: 113
|
Спасибо огромное!
А можно еще вопрос. Как сделать так, чтобы во всем массиве изменялись только нужные ячейки, а остальные данные (у меня, к примеру, формулы) не трогались. Сейчас они все заменяются на значения. Последний раз редактировалось kipish_lp; 27.07.2010 в 05:52. Причина: Возник вопрос |
27.07.2010, 09:30 | #20 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Это меняет дело. Легко не получится, в этом подходе тогда надо делать выборочную выгрузку полученного массива на лист - выгружать не всё, а только в те ячейки, которые подсчитывались. Т.е. вместо одной строки ash.Range("g20:af27") = b надо делать цикл по массиву и выгружать на лист выбранные элементы, а не сразу всё.
Это муторно, попробуйте сами. Только Вы знаете, где эти формулы Ну и очистку тогда тоже делать надо выборочно, не затирая формулы. Это если формулы в области сводной.
webmoney: E265281470651 Z422237915069 R418926282008
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
помогите оптимизировать код. | kievlyanin | Microsoft Office Excel | 3 | 22.05.2009 18:20 |
помогите оптимизировать! | kievlyanin | Microsoft Office Excel | 11 | 28.04.2009 14:19 |
Помогите оптимизировать процедуру | Cold Went | Компоненты Delphi | 4 | 29.04.2008 15:11 |
Помогите оптимизировать! | Altera | Общие вопросы Delphi | 6 | 25.03.2008 20:09 |
помогите оптимизировать процедуру | _XspeC_ | Общие вопросы Delphi | 12 | 08.04.2007 02:05 |