|
|
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
Народ, скажите, пжлст, как можно облегчить следующие рассчеты? Потому что комп часто выдает, что Недостаточно ресурсов. Выберите меньше данных или ... :( Есть файл База, в нем масив данных с А4:K37543 , а ко-во реальных строк 37540 . И есть второй файл, который постепенно накапливается, в данный момент там всего 326 строк, такой размерности: А3:J328 . Проблема в следующем: Во второй файл, путем обычного копирования, вносятся данные по клиенту: ФИО, адрес, город, валюта, ид.код и 3 столбца сумм. В одном столбце вписана формула: =ЕСЛИ(F3=Дол.США;G3*Курс;ЕСЛИ(F3=Евро....) - с ней вопросов не вознкиает :) В другом, вот тут проблемка : =ЕСЛИ(D3=D3;"";СУММПРОИЗВ((D3='D:\tmp\..\[Для сравнения.xls]090821'!$A$4:$A$37543)*''D:\tmp\..\[Для сравнения.xls]090821!$I$4:$I$37543)). Вкратце про части формулы: =ЕСЛИ(D4=D3;""; - сравниваю не совпадает ли ид.код с предыдущим СУММПРОИЗВ((D3='D:\tmp\..\[Для сравнения.xls]090821'!$A$4:$A$37543)*''D:\tmp\..\[Для сравнения.xls]090821!$I$4:$I$37543) - берется ид.код и ищется в базе, когда нашелся,то проводиться суммирования всех цифр с указанного столбца. Вот при расчете последней формулы Excell загинается =((. Но он загинается лишь в том случаее, если файл База не открыт (пишет #ссылка), когда открыт - формула считает. Но в тот же момент, когда все считает, то сохранить ни один из файлов нельзя - говорит, что мало паямти. Какие могут быть идеи предложены? :) Моя была только одна - отключить автоматчиеский пересчет в Ecxell и когда надо сделать расчет - считать. Но она не сработала :( P.S. Минус еще того, что пользоваться можно дишь 2003 офисом. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2009, 13:20 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
не совсем понимаю задачу :)... я бы предложил использовать Access немного... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2009, 14:18 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
Нет .к сожалению работа только с Екселем. Суть проблемы в том, чтобы проводить выборку по значению в другом файле и проводить суммирование всех совподающих значений. Проблема в том, что файл, где проводиться поиск значений и суммирование, очень здоровый - 37 тыс.записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2009, 15:48 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
Подумал... может закинуть все ваши 37000 записей в массив, и дальше можна работать с массивом, даже при закрытой книге-источнике... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2009, 16:46 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
Про какой массив идется речь и как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2009, 17:17 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
Как насчет сводной таблицы с внешними данными? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2009, 17:21 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. В одной из тем приводили ссылку http://www.decisionmodels.com/memlimits.htm. Мож прояснит чего такая ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2009, 17:32 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
Я имею ввиду что мы заносим всю Вашу БД (все записи) в массив созданный в vba, и дальше работаем уже с этим массивом, при этом можна закрыть вторую книгу... Предположительно массив займет меньше памяти чем целая открытая книга с кучей записей... Единственное нужно будет время на запись значений в массив... Попробовал у себя занести 1 300 000 записей в массив - занимает 17 секунд... Массив это по сути ваши же ячейки, только в невидимом виде, обрабатывать их можна также как и ячейки... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2009, 18:03 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
MaximuS_GПопробовал у себя занести 1 300 000 записей в массив - занимает 17 секунд... 2 MaximuS_G поздравляю с хорошим компьютером :) - у меня этот код выполнялся - интереса ради - около 30-ти. Только не делайте так больше никогда. Если зачем-то понадобится занести ячейки в массив - то пишите так: Код: plaintext 1. 2. 3. 2 топикстартер : извините, что засорил тему - уж очень про 17 секунд зацепило. попробуйте прислушаться к совету KL (XL) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 01:21 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
2 qwrqwr , Спасибо за подсказку! Но есть маленькое но с этим методом... я уже когда-то так пытался сделать и столкнулся с такой ситуацией... Например мне необходимо передать данный массив в другую процедуру или функцию, которая требует массив определенного типа данных, отличного от Variant... В таком случае данный метод неприминим. А использование типа Variant ой как ресурсозатратно... Если я не прав, жду конструктивной критики :)... P.S. Я ведь всего лишь аматор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 10:31 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
2 MaximuS_G Я получается вношу код просто в VBA в второй файл, делаю формулы у себя в 2-м файле. Формулы у меня отсаются прежние. Так? Просто я все это сделал и все равно тот же трабл :( Коду меня выглядил след.образом Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 12:15 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
2 Shaher-Maher , Формулы у меня отсаются прежние. Так? нет, как же у Вас формулы остаются прежние, если у Вас все находится внутри массива а не в книге-БД... формулы нужно переделывать на функции... Смотрите, давайте для занесение в массив возьмем код товарища qwrqwr , потому что его код действительно быстрее (17 секунд против 1 секунды)... потом выложите сюда хотя бы образец по строкам (5-10, можна в форме рисунка) с более детальным объяснением и попробуем что-то склепать :) 2 qwrqwr А вот только что попробовал провернуть данное занесение с коллекцией, тоже хавает приблизительно 1 секунду на 1 000 000 записей, плюс позволяет заносить разного типа данные... Как бы теперь эту коллекцию в другую процедуру перенести... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 12:30 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
2 Сам Себе , хм... получается коллекцию можна передать также как и любую переменную и массив... А может кто знает есть ли возможноть обратится к коллекции созданной в одной процедуре из другой, при этом не передавая ее как параметр?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 12:33 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
Файлы выкладываю. Но сами понимаете они урезаны :) Итак. Рабочый файл - это тот в который я все заношу. Формула в этом файле забита и она работает . База - это, то с чем сверяю. Еще раз хочу сказать, что в базе 37 тыс. строк и 15 столбцов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 13:16 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
Вы пишете, что в БД 15 столбцов, но у меня только 3... Остальные не нужны для расчетов ? Теперь, насколько я понял делаете следующие: вводится новый индификационный код, по нему подтягиваеются данные из 3го столбца книги - БД и суммируются, так ? А что за условие по коду? Если ИДК равен ИДК на одну ячейку выше, тогда значение ячейки равно пусто, что это ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 13:45 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
Да используються, только 3 ячейки. А этим условием я просто сравниваю или предыдущая строка сопадает с текующей. Мне это необходимо так-как дальше еще идет обработка этих данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 13:58 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
все сделал... немного правда помучился, все таки метод от qwrqwr здесь не подходит, так как он требует активации книги -БД но тогда не запускается функция... вообще файлы во вложении... требуется, чтоб 2 книги были открытые... давайте посмотрим, сэкономит ли нам этот метод память компа... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 14:31 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
2 MaximuS_G Есть ряд вопросов. Когда открываю сначал "Рабочий.xls" и беру обновить формулы, то выдает ошибку #значен . А когда открою книгу "База.xls", то все нормально. Поэтому решил прописать в строке Workbooks("") полный путь к книге. Но все-равно выдается ошибка - #значен ?? Также когда меняю для "i" значение с 3 на 9 , то почему-то именно две первые строчки не считают :( Но когда добавил поиск по нужному объему, 37544 строк, то ошибок не выдает :). И спс :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 17:02 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
Вообщем я так и не понял, есть ли у Вас еще вопросы... А ошибку при закрытой книге выдавать будет полюбому... Что бы получать данные из закрытой книги нужно использовать дополнительный код, но это уже если нужно сами... Код здесь: http://www.ozgrid.com/VBA/ExtractFromClosedWorkbook.htm Так работает быстро? Ведь я тоже не знаю, всего лишь предположение было... Интересно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 20:36 |
|
||
|
Как облегчить рассчеты?
|
|||
|---|---|---|---|
|
#18+
MaximuS_G...все таки метод от qwrqwr здесь не подходит, так как он требует активации книги -БД... Это утверждение ошибочно, активации книги не требуется (ни в одном из приведенных кодов), в худшем случае прописывание ее :-) Код: plaintext 1. 2. 3. Кстати, с самого начала было понятно, что автора интересует извлечение данных из закрытой книги :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 21:01 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=36191090&tid=2179070]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 518ms |

| 0 / 0 |
