Другие ответы сосредоточены на механике пересчета и роли изменчивых функций, но я думаю, что это упускает часть сути вопроса. В нем рассматриваются правила, которые были использованы, но не столько «почему». Я сосредоточусь на этом.
Концепт дизайна
Позвольте мне начать с концепции дизайна и строительных блоков большинства современных электронных таблиц. Есть «разделение ответственности». Функции - это специальные подпрограммы, которые выполняют определенную задачу и выполняют ее каждый раз, когда их просят. Помимо этого, приложение электронной таблицы контролирует, когда их спрашивают.
Сами функции не содержат никакой логики для пересчета или не пересчета. Природа всех функций Excel заключается в выполнении какого-либо типа операции при каждом запуске. Ни одна функция не имеет собственной «памяти» своего текущего значения или истории своих прошлых вычислений. У него нет возможности узнать, впервые ли его просят выполнить свою работу. Так что ни одна нативная функция не может запускаться только один раз. Если какая-либо функция будет пересчитана, она выполнит то, для чего предназначена, и выдаст новое значение.
Приложение для работы с электронными таблицами содержит некоторый интеллект, который позволяет ему экономить время, пропуская ненужные пересчеты (как описано в ответе Тейлина). Только время перерасчет пропущен, если приложение знает , что значение функции не зависит от изменений электронных таблиц , которые вызвали необходимость пересчитывать вещи.
Так что, если вам нужно запустить функцию один раз, а затем сохранить ее значение? Возьмите пример создания случайного числа, а затем результат не изменится. Это описывает создание случайно сгенерированных констант, и вы можете сделать это с помощью Excel.
Excel не может знать, как вы хотите использовать его возможности; хотите ли вы продолжать создавать новые значения или сохранить последний набор. Каждый параметр является вариантом использования, который поддерживает Excel. Excel учитывает оба случая, предоставляя вам инструменты для расчета новых значений и инструменты для сохранения старых значений. Вы можете построить все, что вы хотите. Но пользователь обязан заставить его делать то, что он хочет.
Функциональная логика
Итак, давайте посмотрим на логику того, что делает функция. Может быть, логика пересчета имеет смысл пропустить случайную функцию, потому что на ее значение не должны влиять другие изменения в электронной таблице?
Изменяется ли значение функции при пересчете, зависит от ее цели и на чем она основана. Расчет постоянных значений всегда будет давать один и тот же результат. Операция, основанная на значениях ячеек, которые не изменились, даст тот же результат.
Однако некоторые функции разрабатываются с намерением и целью каждый раз получать другой результат. Рассмотрим, например, функции, основанные на текущем времени. Они дадут новый результат, основанный на времени пересчета. У вас не может быть функции, цель которой - создать значение на основе текущего времени и не обновлять его при пересчете.
Цель контроля пересчета состоит в том, чтобы всегда отражать текущее состояние вещей при запуске пересчета. Этот критерий не будет соблюден, если функции, основанные на текущем времени, не будут обновлены.
«Случайные» функции, такие как RANDBETWEEN, имеют целью создание нового случайного числа при пересчете. Это то, что они должны делать. Вы можете утверждать, что пересчет может быть пропущен, поскольку на значение не должны влиять другие события, происходящие в электронной таблице.
Если бы это было поведение по умолчанию, вы бы обновляли электронную таблицу, но случайное значение оставалось бы постоянным. Это не очень случайное поведение. Это будет поддерживать один вариант использования, но не другой. Возвращаясь к базовой концепции дизайна, она обрабатывается как любая другая функция. Поведение по умолчанию - Excel пересчитывает его. Если вы хотите сохранить предыдущее значение для своего варианта использования, вы можете сделать это с помощью доступных инструментов.