В Excel не хватило ресурсов при попытке вычислить одну или несколько формул

45443
Larry

Я получил сообщение об ошибке «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 строк данных

Мои вопросы:

  1. Почему он работает на компьютере с меньшим объемом памяти, а не на компьютере с большим объемом памяти? (основной вопрос)
  2. Что я могу сделать, чтобы уменьшить объем памяти, используемый Excel? (подвопрос) (кроме удаления данных)

Любая помощь приветствуется, пожалуйста, укажите мне правильное направление или просто дайте подсказку.

РЕДАКТИРОВАТЬ : я думаю об удалении формул и переместить логику в VBA, и сделать это путем кэширования данных, возможно, на 10000 строк. Но это не решит мою проблему, если «обновить» сводную таблицу будет отображать ту же ошибку.

5
2 вещи с макушки головы, чтобы проверить. 1) есть ли на 6gb машине другие программы, использующие больше памяти? 2) обе версии Excel ТОЧНО одинаковы (применяются одинаковые обновления и т. Д.) Pynner 11 лет назад 1
Такой объем данных может быть лучше обработан базой данных с точки зрения скорости (при условии, что ценная выходная информация находится в сводной таблице). Но в зависимости от сложности формулы, этот подход может потребовать немало усилий. Pynner 11 лет назад 0
Странно, что нерабочий компьютер имеет * больше * ОЗУ. Можете ли вы убедиться в том, что на компьютере достаточно свободной памяти (как физической, так и подкачки) для устранения ошибок? Кроме этого я бы сказал, чтобы оптимизировать или разделить лист, если это возможно. 1M формулы звучат немного большими для листа Excel? lc. 11 лет назад 0
@lc. На том компьютере в диспетчере задач я увидел свободную память 2.2G Larry 11 лет назад 0
Странный. Это точно такой же файл с точно такими же данными? lc. 11 лет назад 0
@lc. Да, тот же набор данных, тот же файл. Larry 11 лет назад 0
У двух машин одинаковые параметры расчета в Excel? Находятся ли 900.000 строк в рабочей книге или во внешней базе данных? Patrick Honorez 11 лет назад 0
@iDevlop С новым годом, я забыл упомянуть, ошибка также возникнет, если я изменю опцию расчета с РУЧНОЙ на АВТО. И строки данных находятся на другом листе в книге. Larry 11 лет назад 0
Оба работают под управлением одной и той же версии Office? 32 бита или 64? Patrick Honorez 11 лет назад 0
@iDevlop Excel 2007 имеет только 1 версию, 32-разрядную, офис начинает поддерживать 64-разрядную версию 2010, и я полагаю, что подрывная деятельность ОС и Excel совпадают. Larry 11 лет назад 0
Weird. Вы можете попытаться сохранить некоторые ресурсы, используя формулы массива вместо обычных формул, но я сомневаюсь, что это решит вашу проблему. Размеры сохраненных файлов одинаковы на обеих машинах? Patrick Honorez 11 лет назад 0
давайте [продолжим это обсуждение в чате] (http://chat.stackoverflow.com/rooms/22044/discussion-between-larry-and-idevlop) Larry 11 лет назад 0
Извините, я не могу общаться. ТАК чат заблокирован там, где я сейчас работаю: - / Patrick Honorez 11 лет назад 0
@iDevlop Спасибо за ваш вклад еще раз, я проверю это завтра. В настоящее время у меня нет доступа к нерабочему компьютеру. Хуже всего то, что я не могу «обновить» сводную таблицу (на основе 900 000 строк данных * 9 столбцов). Сначала я попытаюсь удалить как можно более формулу перемещения, сохранив их как значение. Затем попробуйте ограничить диапазон сводной таблицы на На нерабочем ПК худшее решение, о котором я могу подумать, - это использование сводной таблицы для совокупного результата части исходной сводной таблицы и остальных данных. Larry 11 лет назад 0
Почему бы не переместить данные в другую рабочую книгу или даже в Access mdb? С вашими данными в Access вы удалите большинство ограничений на размер вашего набора данных. Patrick Honorez 11 лет назад 0
@iDevlop 900 000 строк данных - это результат запроса, извлеченный из базы данных Oracle, мне нужно было представить сводную таблицу результатов. Larry 11 лет назад 0
Хорошо. Тогда зачем переносить строки в Excel? Вы можете настроить свой Pivot на прямой запрос к Oracle. Если нет указания счетчика, я бы проиграл. Patrick Honorez 11 лет назад 3
Или, что еще лучше, если вы используете хотя бы Oracle 11g, то он изначально поддерживает запросы PIVOT, тогда работа будет выполняться на стороне сервера, а не локально, и следует избегать любых проблем с ресурсами. 11 лет назад 2
@ Ларри, я сталкивался с одной и той же проблемой довольно много раз и обычно связывал ее с проблемой 32-разрядной версии Excel. Что касается того, почему он работает на одной машине поверх другой ... Я бы сказал, что именно OS / install распределяет ресурсы. Единственные 2 решения, которые я нашел для этого: 1) Написание .Net решений, которые выполняют большую часть работы, затем имеют макрос Excel, который вызывает .exe через `shell`, а затем импортирует уже рассчитанные данные / do минимальная уборка. 2) Множество игр с моим кодом, чтобы попытаться сделать его более эффективным / менее потребляющим память ... Удачи !!! 11 лет назад 1
iDevlop еще раз спасибо за предложение. Но я должен сделать некоторый процесс массирования данных между ними ... @JohnBustos С 1-го момента, одна из моих основных проблем - это "обновление" сводной таблицы, которая уже стоила бы этой проблемы. Может ли .NET построить сводную таблицу? По второму пункту, да, я попробую это. Хотя я знаю, если размер данных увеличится больше, тогда ... ничего не будет работать. Большое спасибо! Завтра обновлю, спасибо еще раз. Larry 11 лет назад 0
@iDevlop спасибо за помощь, проблема решена Larry 11 лет назад 0
@ Ларри: хорошие новости. В конце концов добавьте ответ на свой вопрос, чтобы сообщить нам! Patrick Honorez 11 лет назад 0

6 ответов на вопрос

3

Причиной, вероятно, является различие в 32-битной фрагментации памяти на 2 ПК (часто трудно использовать все теоретически доступные 2 ГБ).
Вы можете уменьшить объем памяти, используемой сводной таблицей, уменьшив количество столбцов и / или уменьшив объем памяти, необходимый для некоторых столбцов (текстовые строки являются хорошим кандидатом).
(Вы можете измерить объем памяти, используемый сводным кешем с помощью VBA PivotCache.memoryUsed)
Я предполагаю, что вы создаете сводный кеш, считывая данные из запроса непосредственно в сводный кеш, а не помещая данные запроса в рабочую таблицу и основывая стержень на листе, который будет использовать гораздо больше памяти.
Вы не говорите, что такое формулы> 1000000, поэтому у меня нет предложений по их улучшению.
Если вы хотите использовать большие объемы данных в сводных таблицах Excel и т. Д., Вы получите лучшие результаты от 64-разрядной версии Excel 2010, для которой не установлено ограничение в 2 ГБ.

Спасибо за предложение, я сейчас пробую материал, нашел хорошую ссылку http://www.add-ins.com/support/out-of-memory-or-not-enough-resource-problem-with-microsoft-excel .htm Larry 11 лет назад 0
В части формул я не использую встроенные или определяемые пользователем функции Volatile, но я думаю об использовании Selection.Calculate и выбираю только несколько строк за раз. Larry 11 лет назад 0
2
Larry

спасибо за все предложения, чтения и помощь. Я решил проблему

  1. Измените все формулы на значения шаг за шагом на ~ 100 000 строк --- Это уменьшит объем памяти, удерживаемой Excel на 10%
  2. Удалил все ненужные данные / рабочие таблицы из рабочей книги (необработанные данные до массирования данных). Это уменьшило объем памяти, удерживаемой Excel на 40%.

И чтение http://www.add-ins.com/support/out-of-memory-or-not-enough-resource-problem-with-microsoft-excel.htm позволяет предположить, почему 6G RAM PC сталкивается с этой проблемой, а не чем 2G RAM ПК. Я думаю, это потому, что на ПК 6G есть много надстроек Excel, которые также потребляют оперативную память.

Спасибо за помощь.

1
mikus

старый квест, но все еще действительный для всех версий, я сталкиваюсь с подобными проблемами, когда формулы, которые я использовал, имели слишком большую область действия, даже если большинство полей были пустыми, например: DO_CALCULATION (D1: D100000) потребует значительного количества времени и даже памяти если только ячейки D1: D10 имеют какое-либо значение. Поэтому будьте осторожны, пытаясь подготовить формулы для расширения данных, сохраняйте небольшие диапазоны :)

1
Byrna5

Похоже, вы создаете очень большие листы Excel. 32-разрядные приложения могут использовать только до 2 ГБ ОЗУ, если только они не могут быть настроены на использование до 3,2 ГБ с помощью специального «переключателя». Так что в 32-битном Excel фактически не хватает памяти после 2 ГБ.

Так что не имеет значения, если у вас есть 16 или 32 ГБ ОЗУ. Вам нужен 64-битный MS Office, чтобы он мог свободно использовать ОЗУ объемом более 2 ГБ. Только тогда ваша дополнительная память объемом 6 ГБ будет действительно полезна для Excel. В противном случае он столкнется с необходимостью выяснить, как работать только с 2 ГБ ОЗУ, и, скорее всего, начнет использовать файл подкачки на жестком диске.

Одной из возможностей будет увеличение размера файла подкачки Windows. Я никогда не позволяю Windows управлять файлом подкачки. Я установил его в 1,5X физической памяти и установил минимальный и максимальный размер файла подкачки. Это предотвращает фрагментацию оперативной памяти. Поэтому, если у вас 4 ГБ ОЗУ, установите значение 6144/6144 МБ мин / макс.

1
Nathan Gould

Ответ заключается в обновлении до 64-разрядной версии Excel. Он может охватывать гораздо больший диапазон памяти, а также, как правило, гораздо быстрее и является подходящим инструментом для работы, если у вас большая таблица.

0
user165568

Одна из возможных причин, по которой у него могут заканчиваться ресурсы на машине с 6 ГБ, а не на машине с 2 ГБ, заключается в том, что сама Windows требует больше ресурсов для управления 6 ГБ памяти, чем для 2 ГБ памяти.

Это была известная проблема в 32-битной Windows (и еще большая проблема в 16-битной Windows). Это должно быть решено на 64-битных системах, но ...

В любом случае, можно проверить: отключите дополнительную оперативную память и посмотрите, исчезнет ли проблема.

Похожие вопросы