powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как облегчить рассчеты?
21 сообщений из 21, страница 1 из 1
Как облегчить рассчеты?
    #36188492
Shaher-Maher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, скажите, пжлст, как можно облегчить следующие рассчеты? Потому что комп часто выдает, что Недостаточно ресурсов. Выберите меньше данных или ... :(

Есть файл База, в нем масив данных с А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 офисом. :(
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36188720
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не совсем понимаю задачу :)... я бы предложил использовать Access немного...
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36189072
Shaher-Maher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет .к сожалению работа только с Екселем.

Суть проблемы в том, чтобы проводить выборку по значению в другом файле и проводить суммирование всех совподающих значений.

Проблема в том, что файл, где проводиться поиск значений и суммирование, очень здоровый - 37 тыс.записей
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36189295
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подумал... может закинуть все ваши 37000 записей в массив, и дальше можна работать с массивом, даже при закрытой книге-источнике...
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36189414
Shaher-Maher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про какой массив идется речь и как это сделать?
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36189429
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как насчет сводной таблицы с внешними данными?
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36189459
Mitar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. В одной из тем приводили ссылку http://www.decisionmodels.com/memlimits.htm. Мож прояснит чего такая ошибка.
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36189544
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имею ввиду что мы заносим всю Вашу БД (все записи) в массив созданный в vba, и дальше работаем уже с этим массивом, при этом можна закрыть вторую книгу... Предположительно массив займет меньше памяти чем целая открытая книга с кучей записей... Единственное нужно будет время на запись значений в массив... Попробовал у себя занести 1 300 000 записей в массив - занимает 17 секунд... Массив это по сути ваши же ячейки, только в невидимом виде, обрабатывать их можна также как и ячейки...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub vMassiv()
Dim MyArray( 1  To количество строк,  1  To количество столбцов)
Dim i As Byte, j As Long

Workbooks("Ваша книга").Activate
For i =  1  To  20 
    For j =  1  To  65000 
    arr(j, i) = Workbooks("Ваша книга").Sheets("Нужный лист").Cells(j, i).Value
    Next j
Next i

End Sub
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36189991
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_GПопробовал у себя занести 1 300 000 записей в массив - занимает 17 секунд... 2 MaximuS_G
поздравляю с хорошим компьютером :) - у меня этот код выполнялся - интереса ради - около 30-ти.
Только не делайте так больше никогда.
Если зачем-то понадобится занести ячейки в массив - то пишите так:
Код: plaintext
1.
2.
3.
Dim MyArray
With Sheets( 1 )
    MyArray = .Range(.Cells( 1 ,  1 ), .Cells( 65000 ,  20 ))
End With
это чуть более эффективно :)

2 топикстартер :
извините, что засорил тему - уж очень про 17 секунд зацепило.
попробуйте прислушаться к совету KL (XL)
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36190386
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 qwrqwr ,
Спасибо за подсказку! Но есть маленькое но с этим методом... я уже когда-то так пытался сделать и столкнулся с такой ситуацией... Например мне необходимо передать данный массив в другую процедуру или функцию, которая требует массив определенного типа данных, отличного от Variant... В таком случае данный метод неприминим. А использование типа Variant ой как ресурсозатратно... Если я не прав, жду конструктивной критики :)...

P.S. Я ведь всего лишь аматор
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36190740
Shaher-Maher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 MaximuS_G

Я получается вношу код просто в VBA в второй файл, делаю формулы у себя в 2-м файле. Формулы у меня отсаются прежние. Так?

Просто я все это сделал и все равно тот же трабл :(

Коду меня выглядил след.образом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub vMassiv()
Dim MyArray( 1  To  37544 ,  1  To  10 )
Dim i As Byte, j As Long

Workbooks("D:\tmp\new job\1.xls").Activate
For i =  1  To  20 
    For j =  1  To  65000 
    arr(j, i) = Workbooks("D:\tmp\new job\1.xls").Sheets("090821").Cells(j, i).Value
    Next j
Next i

End Sub
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36190787
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Shaher-Maher ,
Формулы у меня отсаются прежние. Так?
нет, как же у Вас формулы остаются прежние, если у Вас все находится внутри массива а не в книге-БД... формулы нужно переделывать на функции...
Смотрите, давайте для занесение в массив возьмем код товарища qwrqwr , потому что его код действительно быстрее (17 секунд против 1 секунды)... потом выложите сюда хотя бы образец по строкам (5-10, можна в форме рисунка) с более детальным объяснением и попробуем что-то склепать :)

2 qwrqwr
А вот только что попробовал провернуть данное занесение с коллекцией, тоже хавает приблизительно 1 секунду на 1 000 000 записей, плюс позволяет заносить разного типа данные...
Как бы теперь эту коллекцию в другую процедуру перенести...
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36190794
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Сам Себе ,
хм... получается коллекцию можна передать также как и любую переменную и массив... А может кто знает есть ли возможноть обратится к коллекции созданной в одной процедуре из другой, при этом не передавая ее как параметр?..
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36190937
Shaher-Maher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Файлы выкладываю. Но сами понимаете они урезаны :)

Итак. Рабочый файл - это тот в который я все заношу. Формула в этом файле забита и она работает .

База - это, то с чем сверяю.

Еще раз хочу сказать, что в базе 37 тыс. строк и 15 столбцов
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36191034
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы пишете, что в БД 15 столбцов, но у меня только 3... Остальные не нужны для расчетов ?
Теперь, насколько я понял делаете следующие: вводится новый индификационный код, по нему подтягиваеются данные из 3го столбца книги - БД и суммируются, так ? А что за условие по коду?
Если ИДК равен ИДК на одну ячейку выше, тогда значение ячейки равно пусто, что это ?
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36191090
Shaher-Maher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да используються, только 3 ячейки.

А этим условием я просто сравниваю или предыдущая строка сопадает с текующей. Мне это необходимо так-как дальше еще идет обработка этих данных.
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36191210
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все сделал... немного правда помучился, все таки метод от qwrqwr здесь не подходит, так как он требует активации книги -БД но тогда не запускается функция... вообще файлы во вложении... требуется, чтоб 2 книги были открытые...
давайте посмотрим, сэкономит ли нам этот метод память компа...
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36191711
Shaher-Maher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 MaximuS_G

Есть ряд вопросов. Когда открываю сначал "Рабочий.xls" и беру обновить формулы, то выдает ошибку #значен . А когда открою книгу "База.xls", то все нормально.

Поэтому решил прописать в строке Workbooks("") полный путь к книге. Но все-равно выдается ошибка - #значен ??

Также когда меняю для "i" значение с 3 на 9 , то почему-то именно две первые строчки не считают :(
Но когда добавил поиск по нужному объему, 37544 строк, то ошибок не выдает :).


И спс :)
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36192006
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем я так и не понял, есть ли у Вас еще вопросы... А ошибку при закрытой книге выдавать будет полюбому... Что бы получать данные из закрытой книги нужно использовать дополнительный код, но это уже если нужно сами... Код здесь:
http://www.ozgrid.com/VBA/ExtractFromClosedWorkbook.htm
Так работает быстро? Ведь я тоже не знаю, всего лишь предположение было... Интересно :)
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36192030
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G...все таки метод от qwrqwr здесь не подходит, так как он требует активации книги -БД...
Это утверждение ошибочно, активации книги не требуется (ни в одном из приведенных кодов), в худшем случае прописывание ее :-)

Код: plaintext
1.
2.
3.
Dim MyArray
With Worksbooks("Книга1.xls").Sheets( 1 )
    MyArray = .Range(.Cells( 1 ,  1 ), .Cells( 65000 ,  20 ))
End With

Кстати, с самого начала было понятно, что автора интересует извлечение данных из закрытой книги :-)
...
Рейтинг: 0 / 0
Как облегчить рассчеты?
    #36192070
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, у меня не работало без активации :)...
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как облегчить рассчеты?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]