Я получил сообщение об ошибке «Excel исчерпал ресурсы при попытке вычисления одной или нескольких формул» наОДИНмоих компьютеров (из 2).
Мой рабочий лист содержит: (Внутри одного рабочего листа, не рабочей книги, есть формулы на другом рабочем листе)
1 000 000 формул
- Сводная таблица на основе 900 000 строк данных
При запуске Excel/VBA для действия «Вычислить лист» (только для текущего листа) программа выдает следующее сообщение об ошибке:
Excel ran out of resources while attempting to calculate one or more formulas
ни на "обновлении" сводной таблицы в (Excel или VBA) ни на "Вычислении листа" в (Excel или VBA)
У меня 2 компьютера:
оба работают под управлением 64-битной Windows 7,
оба работают под управлением Excel 2007 32Bit,
Я запускаю Excel сразу после запуска Windows,
Мой ПК для разработки с 2 ГБ оперативной памяти может работать без проблем,
другой ПК с 6 ГБ ОЗУ показал
ran out of resources
сообщение об ошибкеРаботает с тем же набором данных, тем же файлом Excel
Я также заметил, что на моем компьютере для разработки используется около 1,2 ГБ оперативной памяти, а на нерабочем компьютере — 900 МБ оперативной памяти до нажатия кнопки «Обновить»/«Рассчитать».
РЕДАКТИРОВАТЬ
Неработающий компьютер может обрабатывать данные в пределах 100 000 строк данных.
Мои вопросы:
- Почему это работает на компьютере с меньшим объемом памяти, но не работает на компьютере с большим объемом памяти? (главный вопрос)
- Что можно сделать, чтобы уменьшить объем памяти, используемой Excel? (дополнительный вопрос) (кроме удаления данных)
Любая помощь будет оценена по достоинству, пожалуйста, укажите мне правильное направление или просто дайте подсказку.
РЕДАКТИРОВАТЬ:Я думаю удалить формулы и перенести логику в vba, и сделать это кэшированием данных, может быть, по 10 000 строк. Но это не решит мою проблему, если "обновить" сводную таблицу будет показывать ту же ошибку.
решение1
Причина, вероятно, в разной 32-битной фрагментации памяти на 2 ПК (часто бывает сложно использовать все теоретически доступные 2 ГБ).
Вы можете уменьшить объем памяти, используемой сводной таблицей, уменьшив количество столбцов и/или уменьшив объем памяти, требуемый для некоторых столбцов (текстовые строки являются хорошим кандидатом).
(Вы можете измерить объем памяти, используемый кэшем сводной таблицы, с помощью VBA PivotCache.memoryUsed)
Я предполагаю, что вы создаете кэш сводной таблицы, считывая данные из запроса непосредственно в кэш сводной таблицы, а не помещая данные запроса на рабочий лист и основывая сводную таблицу на рабочем листе, что использовало бы гораздо больше памяти.
Вы не говорите, что такое >1000000 формул, поэтому у меня нет никаких предложений по их улучшению.
Если вы хотите использовать большие объемы данных в сводных таблицах Excel и т. д., вы получите лучшие результаты с 64-битной версией Excel 2010, которая не имеет ограничения в 2 ГБ
решение2
спасибо за все предложения, чтения и помощь. Я решил проблему
- Пошагово замените все формулы на значения для ~ 100 000 строк --- Это сократит объем памяти, занимаемой Excel, на 10%
- Удалены все ненужные данные/рабочие листы в рабочей книге (необработанные данные до обработки данных) --- Это уменьшило объем памяти, занимаемой Excel, на 40%.
И чтениеhttp://www.add-ins.com/support/out-of-memory-or-not-enough-resource-problem-with-microsoft-excel.htmпредположите, почему ПК с 6G RAM сталкиваются с этой проблемой, а не ПК с 2G RAM. Я думаю, это потому, что на ПК с 6G установлено много надстроек Excel, которые также потребляют RAM.
Спасибо за помощь.
решение3
старый вопрос, но все еще актуальный для всех версий, я сталкиваюсь с похожими проблемами, когда используемые мной формулы имели слишком большую область действия, хотя большинство полей были пустыми, например: DO_CALCULATION(D1:D100000) займет значительное количество времени и памяти, даже если только ячейки D1:D10 имеют какое-либо значение. Так что будьте осторожны, пытаясь сделать формулы готовыми к расширению данных, сохраняйте небольшие диапазоны :)
решение4
Ответ — обновить Excel до 64-битной версии. Она может работать с гораздо большим диапазоном памяти, а также в целом работает намного быстрее и является правильным инструментом для работы, если у вас большая электронная таблица.