Вычисление потоков в эксель как отключить
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
| ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |
Изменение пересчета, итерации или точности формулы в Excel
Для эффективного использования формул необходимо ознакомиться с тремя ключевыми понятиями.
Вычисление — это процесс расчета по формулам и последующего отображения значений результатов в ячейках, содержащих формулы. Во избежание ненужных вычислений, которые забрать время и замедлить работу компьютера, Microsoft Office Excel автоматически пересчитывает формулы только при изменении влияющих на формулу ячеек. Это является стандартной процедурой при первом открытии книги и ее редактировании. Однако тем, как и когда Excel будет пересчитывать формулы, можно управлять.
Итерация — это повторный пересчет на отдельном числовом условии. Excel не может автоматически вычислить формулу, которая ссылается (прямо или косвенно) на ячейку, содержаную эту формулу. Это называется циклской ссылкой. Если формула ссылается на одну из собственных ячеек, необходимо определить, сколько раз она должна пересчитываться. Цикловые ссылки могут итерироваться бесконечно. Тем не менее, вы можете сами задать предельное число итераций и относительную погрешность.
Точность — это показатель степени сходимости вычислений. Excel хранит и выполняет вычисления с точностью 15 значащих цифр. Однако существует возможность изменить точность вычислений, так что Excel при пересчете формул будет использовать для вычислений не хранимое, а отображаемое значение.
Изменение при пересчете листа или книги
Во время вычислений можно выбирать команды и выполнять ввод чисел или формул. Для выполнения команд или других действий вычисления прерываются, а затем возобновляются снова. Если книга содержит большое число формул либо листы содержат таблицы данных или функции, автоматически пересчитываемые при каждом пересчете книги, процесс вычислений может занять значительное время. Он также может быть длительным, если листы содержат связи с другими листами или книгами. Можно изменить способ выполнения вычислений, установив параметр пересчета вручную.
Важно: Изменение любого из этих параметров влияет на все открытые книги.
- На вкладке Файл нажмите кнопку Параметры и выберите категорию Формулы. В Excel 2007 нажмите кнопку «Microsoft Office»,выберите «Параметры Excel»и щелкните категорию «Формулы».
- Выполните одно из указанных ниже действий.
- Для пересчета всех зависимых формул при каждом изменении значения, формулы или имени в разделе Параметры вычислений в группе Вычисления в книге выберите пункт Автоматически. Это — способ вычислений по умолчанию.
- Чтобы пересчитать все зависимые формулы, кроме таблиц данных, при каждом изменении значения, формулы или имени в разделе «Параметры вычислений» в разделе «Вычисления книги» выберите значение «Автоматически» за исключением таблиц данных.
- Для отключения автоматического пересчета и выполнения пересчета открытых книг только при явном требовании (с помощью клавиши F9) в разделе Параметры вычислений в группе Вычисления в книге выберите параметр Вручную.
Примечание: При выборе параметра Вручную Excel автоматически устанавливает флажок Пересчитывать книгу перед сохранением. Если сохранение книги занимает много времени, для его экономии снимите флажок Пересчитывать книгу перед сохранением.
Совет: Многие из этих параметров можно изменять и вне диалогового окна Параметры Excel. Откройте вкладку Формулы и в группе Вычисления щелкните элемент Параметры вычислений, а затем — Выполнять автоматически.
Примечание: Если лист содержит формулу, связанную с непересчитанным листом, и эта связь обновляется, появится сообщение о том, что исходный лист полностью не пересчитан. Для обновления связи с текущим значением, записанном в исходном листе, даже если оно неверно, нажмите кнопку ОК. Для прекращения обновления связи и использования предыдущего значения, полученного из исходного листа, нажмите кнопку Отмена.
Excel works!

Почему виснет Excel? Использование 25% процессора
Август 23, 2017 / Написал Izotov / No Comments
В этой статье мы рассмотрим вопрос оптимального использования Excel’ем ресурсов компьютера. Ведь даже если файл оптимизирован, бывает, что все равно виснет Excel. Почему? Можно сказать, что этот материал продолжение нашумевшей статьи «Почему тормозит Excel?«, в которой мы описывали все возможные проблемы именно внутри файлов Excel. Сейчас поговорим об оптимизации работы вашего ПК при работе с таблицами.

В большинстве случаев виной тормозов и зависаний Excel служит не оптимальное оформление, структура, данные файла, но бывает что и ресурс компьютера не задействован в полной мере. Например, процессор используется на 25%. Ниже мы предлагаем несколько вариантов, которые точно не помешает проверить если у вас виснет Excel.
Excel использует 25% ресурсов процессора. Как исправить?
Современные компьютеры очень производительны, что позволяет работать в режиме многозадачности и работать в нескольких программах одновременно. Для того, чтобы Excel не занимал все ресурсы компьютера, у версий табличного редактора начиная с 2007 есть специальная настройка — Включить многопоточные вычисления. Проверьте включена ли она и задействована ли у вас полная мощность процессора.
Для этого зайдите в круглую кнопку Office (левый верхний угол) — Параметры Excel — найдите раздел Дополнительно — подраздел Формулы. См. первую картинку.
Проверьте, чтобы у вас стояла галочка «использовать все процессоры данного компьютера».
Можно так же принудительно поставить максимальное количество — в данном случае 4. Для некоторых расчетов может выручить. Я обращал внимание, что, например, при сортировке больших таблиц часто используется только 1 процессор из 4 (по умолчанию), отсюда, кстати, и 25% использования процессоров, о котором часто упоминается. Установив принудительно максимальное количество задействованных потоков, вы уберете эту проблему.
Для включения функции многопоточных вычислений в VBA используйте команду:
Application.MultiThreadedCalculation.Enabled = True
Кстати, отключить полное задействование тоже полезно, особенно, если вы выполняете параллельно несколько задач, а табличный редактор не в приоритете.
Как задействовать все процессоры. Настройка Windows
Кстати, не только Excel может ограничить количество процессоров в работе. В Windows тоже есть такая возможность.
Для того, чтобы проверить настройку Windows, нажимаем Пуск — Выполнить — вводим команду msconfig — заходим на вкладку Загрузка — Дополнительные параметры..

Убедитесь, что число процессоров не задано вручную на минимальном уровне, или галочка не установлена и система по умолчанию использует максимум ресурсов.
Не помогло, все равно виснет Excel… Еще причины
- Если у вас открыты несколько книг Excel, то расчет происходит по всем измененным ячейкам во всех открытых книг. По возможности закройте ненужные книги.
- Если у вас по-настоящему большие таблицы (~0,5 млн строк и больше) и/или сложные вычисления, то лучше использовать PowerPivot. Которому мы скоро посветим большую рубрику!
- Постарайтесь закрыть другие программы, которые забирают много оперативной памяти. Google Chrome самый распространенный замедлитель расчетов в Excel.
- Установите Excel 2010 или 2013, в нем действительно хорошо потрудились над улучшением скорости вычислений. Мой опыт показывает, что ускорение достигает 2-3 раз для некоторых файлов, в первую очередь за счет асинхронного вызов а функций.
- Не забывайте отключать автообновления экрана во время вычислений макросом
Application.ScreenUpdating = False
Если эти методы вам не помогли, проверьте также способы, предложенные в этой статье Почему тормозит Excel?
Остались еще вопросы? Пишите их в комментариях под статьей!
Похожие статьи
- 31.08.2017Вкладка Разработчик. Для чего она нужна в Excel?Posted in Работа с файлом
- 19.01.2018Каким был 2017 год для excelworks.ru? План на 2018 годPosted in Прочее
- 16.11.2018Как вставить документ в Excel или Word целиком? Хранение доков внутри файловPosted in Работа с файлом
- 18.03.2015Почему тормозит Excel? Большой размер файла ExcelPosted in Формулы, Мануалы, Работа с файлом
- 06.02.2015Excel — самый популярный табличный редакторPosted in Excel, Прочее
- 26.09.2017Как убрать надпись страница в Excel? Страничный режимPosted in Оформление, Работа с файлом
- 20.02.2018Как правильно и быстро очистить ячейки в Excel?Posted in Работа с текстом, Оформление, Работа с файлом
- 09.08.2015Добавить список адресов на картуPosted in Прочее
Многопотоковый пересчет в Excel
Многопотоковый пересчет листов впервые появился в Microsoft Office Excel 2007. Вы можете настроить до 1024 одновременных потоков, которые Excel будет использовать при пересчете, независимо от количества процессоров или ядер на компьютере.
С каждым потоком связаны затраты ресурсов операционной системы, поэтому не настраивайте больше потоков, чем нужно.
Если компьютер имеет несколько процессоров или ядер, за эффективное распределение потоков между процессорами отвечает операционная система.
Обзор многопотокового пересчета листов в Excel
Excel пытается определить части цепочки вычисления, которые можно пересчитывать одновременно в разных потоках. Ниже в качестве примера приведено очень простое дерево (где «x ← y» означает, что y зависит только от x).
Рис. 1. Параллельные вычисления в разных потоках
Когда выполнено вычисление для ячейки A1, можно последовательно выполнить вычисление для ячеек A2 и A3 в одном потоке, в то время как в другом потоке последовательно выполняются вычисления для B1 и C1. Это возможно при условии, что все ячейки потокобезопасны.
Термин «Потокобезопасная ячейка» обозначает ячейку, содержащую только потокобезопасные функции. Список потоконебезопасных елементов см. в Какие элементы в Excel считаются потокобезопасными, а какие — нет.
Большинство используемых на практике книг содержат гораздо более сложные деревья зависимостей, чем этот пример. Кроме того, время пересчета ячейки не известно до завершения вычисления и может варьироваться в широких пределах в зависимости от аргументов функции. Чтобы получить наилучшие результаты, Excel пытается улучшить порядок вычисления после каждого вычисления, пока это возможно.
Excel использует один основной поток, чтобы запускать или выполнять:
- встроенные команды;
- команды XLL;
- функции интерфейса диспетчера надстроек XLL (функция xlAutoOpen и т. д.)
- пользовательские команды Microsoft Visual Basic для приложений (Microsoft Visual Basic for Applications, VBA), часто именуемые макросами;
- пользовательские функции VBA;
- встроенные потоконебезопасные функции листа (см. список в следующем разделе);
- пользовательские команды и функции листа макросов XLM;
- функции и команды надстроек COM;
- функции и операторов в выражениях условного форматирования;
- функции и операторы в определениях определенных имен, используемых в формулах листа;
- принудительную оценку выражения в поле редактирования формулы с помощью клавиши F9.
Вычисления по всем формулам листа, независимо от того, потокобезопасны функции или нет, выполняются в основном потоке, если не настроено использование нескольких потоков в Excel. Когда пользователь указывает, что следует использовать несколько потоков, дополнительные потоки используются для потокобезопасных ячеек. Обратите внимание, что основной поток также может использоваться для потокобезопасных ячеек, когда это целесообразно для балансировки нагрузки.
Стоит отметить, что Excel не выполняет более одной команды за раз, поэтому необязательно применять те же меры предосторожности, что и при написании потокобезопасных функций, например использовать локальную память потока и критические секции.
Какие элементы в Excel считаются потокобезопасными, а какие — нет
Excel считает покобезопасными только следующие элементы:
- Все унарные и двоичные операторы в Excel.
- Почти все встроенные функции листа, начиная с Excel 2007 (см. список исключений).
- Функции надстроек XLL, которые явным образом зарегистрированы как потокобезопасные.
Потоконебезопасные встроенные функции листа:
Указанные ниже действия считаются небезопасными:
- пользовательские функции VBA;
- пользовательские функции надстроек COM;
- пользовательские функции листа макросов XLM;
- функции надстроек XLL, не зарегистрированные как потокобезопасные.
Вывод: следующие операции и функции потоконебезопасны и дают сбой при вызове из функции XLL, зарегистрированной как потокобезопасная.
- Вызов информационных функций XLM, например xlfGetCell (GET.CELL).
- Вызов xlfSetName (SET.NAME) для определения или удаления внутренних имен XLL.
- Вызов потоконебезопасных пользовательских функций с помощью xlUDF.
- Вызов функции xlfEvaluate для выражений, содержащих потоконебезопасные функции или определенные имена, определения которых содержат потоконебезопасные функции.
- Вызов функции xlAbort для сброса условия останова.
- Вызов функции xlCoerce для получения значения невычисленной ссылки на ячейку.
Функции листа XLL не могут вызывать команды C API, например xlcSave, независимо от того, зарегистрированы они как потокобезопасные или нет.
Если функции XLL, объявленные потокобезопасными, не могут вызывать информационные функции XLM или ссылаться на невычисленные ячейки, Excel не допускает регистрацию функций XLL, зарегистрированных в качестве эквивалентов листа макросов, как потокобезопасных. Поэтому получить значение невычисленной ссылки на ячейку с помощью xlCoerce не удастся из-за ошибки xlretUncalced. Вызов информационной функции XLM приведет к ошибке xlretFailed. Другие указанные ранее точки завершают работу с кодом ошибки, упомянутым в C API Excel: xlretNotThreadSafe.
Функции обратного вызова для C API — потокобезопасные:
Единственное исключение — функция xlSet, которая является эквивалентом команды и, поэтому, не может вызываться из функций листа.
Функцию листа XLL можно зарегистрировать в Excel как потокобезопасную. Это говорит Excel о том, что функция может вызываться безопасно и одновременно в нескольких потоках, хотя необходимо убедиться, что это действительно так. Вы можете дестабилизировать Excel, если функция, зарегистрированная как потокобезопасная, ведет себя небезопасно.
Регистрация функций XLL как потокобезопасных
Ниже приведены правила, которые необходимо соблюдать разработчикам при создании потокобезопасных функций.
- Не вызывайте ресурсы в других библиотеках DLL, которые могут быть потоконебезопасными.
- Не осуществляйте потоконебезопасные вызовы с помощью C API или COM.
- Защищайте ресурсы, которые могут использоваться одновременно несколькими потоками, с помощью критических секций.
- Используйте локальную память потока для хранения данных потока и заменяйте статические переменные в функциях локальными переменными потока.
В Excel действует дополнительное ограничение: потокобезопасные функции невозможно зарегистрировать как эквивалентные функциям листа макросов, поэтому они не могут вызывать информационные функции XLM и получать значения непересчитанных ячеек.
Состязание за память
Многопоковые системы должны решать две основные проблемы:
- Как защитить память, с которой выполняется чтение или на которую выполняется запись, с помощью нескольких потоков.
- Как создать память, связанную с выполняемым потоком и доступную только ему, и получить к ней доступ.
В операционной системе Windows и пакете Windows SDK есть средства для их решения: критические секции и API для локального хранилища потока (TLS) соответственно. Дополнительные сведения см. в статье Управление памятью в Excel.
Первая проблема может возникнуть, например, когда двум функциям листа (или двум параллельно выполняемым экземплярам одной функции) нужен доступ к глобальной переменной в проекте DLL (например, для ее изменения). Помните, что эта переменная может быть скрыта в глобально доступном экземпляре объекта класса.
Вторая проблема может возникнуть, например, когда функция листа объявляет статическую переменную или объект в коде функции. Компилятор C/C++ создает только одну копию, которую используют все потоки. Это означает, что один экземпляр функции может изменить значение, а другой (в другом потоке) может использовать ранее заданное значение.
Примеры применения MTR
Любой XLL-модуль, который экспортирует функции листа, может использовать многопотоковый пересчет (MTR) в Excel, если эти функции не должны выполнять потоконебезопасные действия. Это позволяет Excel максимально быстро выполнять пересчет в книгах, в которых они используются, и поэтому MTR рекомендуется применять всегда.
В частности, MTR имеет большое влияние на время пересчета книг, которые вызывают пользовательские функции (UDF), которые в свою очередь вызывают внешние процессы для получения желаемых результатов. Рассмотрим функцию UDF, вызывающую удаленный сервер, который может обрабатывать большое количество запросов одновременно, и книгу, содержащую большое количество вызовов такой функции. Если пересчет книги однопотоковый, следующий вызов UDF и удаленного сервера не может начаться, пока не завершится предыдущий. В результате возможность сервера обрабатывать сразу несколько вызовов не используется. Если пересчет книги многопотоковый, Excel может совершать несколько вызовов одновременно или в быстрой последовательности.
Если в Excel и на сервере настроено использование одинакового количества потоков (N), при этом топология дерева зависимостей книги позволяет это, общее время пересчета можно сократить до значения, которое стремится к 1/N. Это возможно, даже если у клиентского компьютера (на котором обрабатывается книга) всего один процессор, особенно если время вызова сервера невелико по сравнению с временем обработки вызова сервером.
С каждым дополнительным потоком связаны затраты ресурсов операционной системы. Поэтому оптимальное количество потоков, которое должно использовать приложение Excel, для каждой книги, сервера и клиентского компьютера определяется опытным путем.
Например, рассмотрим однопроцессорный компьютер под управлением Excel и книгу, содержащую 1000 ячеек. Он вызывает определяемую пользователем функцию, которая, в свою очередь, вызывает один или несколько удаленных серверов. Предположим, что 1000 ячеек не зависят друг от друга, поэтому Excel не нужно ждать завершения одного вызова перед вызовом следующего. (Некоторое ослабление этого ограничения возможно, не затрагивая этот пример.) Если серверы могут обрабатывать 100 запросов одновременно, а Excel настроен на использование 100 потоков, время выполнения может быть сокращено до 1/100, где используется только один поток. Накладные расходы, связанные с выделением вызовов в Excel для каждого потока и операционной системой, которая управляет 100 потоками, означает, что на практике сокращение будет не столь велико. Здесь также существует неявное предположение, что сервер хорошо масштабируется, и запрос на обработку 100 задач одновременно не повлияет на время выполнения отдельных задач.
Пример практического применения, при котором этот способ дает отличные результаты, — использование методов Монте-Карло, а также выполнение других ресурсоемких задач, которые можно разделить на более мелкие подзадачи и обработать на серверах.
Рекомендации по использованию служб Excel
Службы Excel поддерживают загрузку, вычисление и обработку электронных таблиц Excel на сервере. Пользователи могут получить доступ к электронным таблицам и работать с ними, используя стандартные средства браузера.
Пользовательские функции служб Excel созданы с использованием управляемого кода Microsoft .NET Framework и доступны благодаря сборке .NET. XLL-модули не поддерживаются в службах Excel. Ресурс UDF сервера управляемого кода может вызывать XLL-модуль для доступа к его функциональности, что обеспечивает одинаковую функциональность при работе с книгами, загруженными на сервер и локальный компьютер.
Чтобы функции XLL были доступны, необходимо упаковать их в сборку .NET, преобразующую аргументы и возвращаемые значения из собственных типов данных в управляемые типы данных .NET Framework, и вызывающую функции XLL. Программа-оболочка .NET экспортирует один ресурс UDF сервера для каждой функции XLL, к которой обращается сборка. Дополнительное требование: все вызываемые таким образом функции XLL должны быть потокобезопасными. Так как функции XLL не регистрируются так, как в клиенте Excel, сервер и программа-оболочка .NET не могут обеспечить их потокобезопасность. За это несет ответственность разработчик XLL.
См. также
- Пересчет в Excel
- Управление памятью в Excel
- Доступ к коду XLL в Excel
- Понятия, связанные с программированием для Excel
- Справочник по функциям API SDK XLL для Excel
