Почему номера Excel RANDBETWEEN меняются для любой операции на листе?

14

Мне нужно использовать функцию Microsoft Excel RANDBETWEEN, и я знаю, что новый набор случайных чисел генерируется каждый раз, когда вы делаете что-либо еще где-нибудь на рабочем листе. Мне также известны обходные пути для «замораживания» набора случайных чисел, сгенерированного, скажем, для сортировки n списков случайных чисел между a и b. У меня такой вопрос: ПОЧЕМУ меняются случайные числа? Есть ли что-то в алгоритме, что требует этого? FWIW, Google Sheets, LibreOffice Calc, Apple Numbers демонстрируют одинаковое поведение.

nowradioguy
источник
Вопросы с "Почему ...?" здесь часто не по теме, так как, вероятно, только автор мог дать определенный ответ. Ваш вопрос не содержит желаемой функциональности, поэтому вам сложно что-либо предложить.
Матэ Юхас
2
@ MátéJuhász Похоже, данные ответы показывают, что это не сложно ...
Solar Mike,
Не ответ, но вот пара обходных путей для тех, кому он нужен: stackoverflow.com/questions/8011032/…
Адам

Ответы:

28

У Чарльза Уильямса есть хорошее объяснение того, как Excel вычисляет вещи и почему.

http://www.decisionmodels.com/calcsecretsi.htm

По сути, если рабочая книга содержит изменчивые функции (см. Список Чарльза, поскольку изменяемая функция изменялась с годами в разных версиях Excel), при изменении любой ячейки в рабочей книге будет произведен пересчет всей рабочей книги (если Excel настроен на автоматический расчет). Если в рабочей книге нет изменчивых функций, будут пересчитаны только те ячейки, на которые повлияло последнее изменение.

Другие здесь заявили, что автоматический расчет всегда вычисляет все в рабочей книге при изменении любой ячейки, но это неправильно. Только изменчивые функции вызывают автоматический пересчет всех ячеек в рабочей книге. Без энергозависимых функций Excel пересчитывает только то, что необходимо пересчитать.

Вот почему такие люди, как я, которые знают разницу, настоятельно советуют по возможности избегать нестабильных функций, таких как OFFSET () или INDIRECT (), в ячейках листа, поскольку сыворотка замедляет работу книги, вызывая полный пересчет после каждого изменения ячейки. Научиться использовать INDEX () вместо OFFSET () может привести к значительному повышению скорости, поскольку индекс не является изменчивым (см. Статью Чарльза для более подробной информации).

Механизм вычислений Excel основан на философии «recalc or die», которая отличает Excel от конкурирующих продуктов, когда он находился в разработке. Проверьте эту статью: https://www.geekwire.com/2015/recalc-or-die-30-years-later-microsoft-excel-1-0-vets-recount-a-project-that-defied-the -odds /

teylyn
источник
3
Конечно, если «изменчивая функция» определена правильно, не должно быть никакой видимой разницы между пересчетом всего и пересчетом только того, что нужно, кроме скорости.
Хоббс
12

Другие ответы сосредоточены на механике пересчета и роли изменчивых функций, но я думаю, что это упускает часть сути вопроса. В нем рассматриваются правила, которые были использованы, но не столько «почему». Я сосредоточусь на этом.

Концепт дизайна

Позвольте мне начать с концепции дизайна и строительных блоков большинства современных электронных таблиц. Есть «разделение ответственности». Функции - это специальные подпрограммы, которые выполняют определенную задачу и выполняют ее каждый раз, когда их просят. Помимо этого, приложение электронной таблицы контролирует, когда их спрашивают.

Сами функции не содержат никакой логики для пересчета или не пересчета. Природа всех функций Excel заключается в выполнении какого-либо типа операции при каждом запуске. Ни одна функция не имеет собственной «памяти» своего текущего значения или истории своих прошлых вычислений. У него нет возможности узнать, впервые ли его просят выполнить свою работу. Так что ни одна нативная функция не может запускаться только один раз. Если какая-либо функция будет пересчитана, она выполнит то, для чего предназначена, и выдаст новое значение.

Приложение для работы с электронными таблицами содержит некоторый интеллект, который позволяет ему экономить время, пропуская ненужные пересчеты (как описано в ответе Тейлина). Только время перерасчет пропущен, если приложение знает , что значение функции не зависит от изменений электронных таблиц , которые вызвали необходимость пересчитывать вещи.

Так что, если вам нужно запустить функцию один раз, а затем сохранить ее значение? Возьмите пример создания случайного числа, а затем результат не изменится. Это описывает создание случайно сгенерированных констант, и вы можете сделать это с помощью Excel.

Excel не может знать, как вы хотите использовать его возможности; хотите ли вы продолжать создавать новые значения или сохранить последний набор. Каждый параметр является вариантом использования, который поддерживает Excel. Excel учитывает оба случая, предоставляя вам инструменты для расчета новых значений и инструменты для сохранения старых значений. Вы можете построить все, что вы хотите. Но пользователь обязан заставить его делать то, что он хочет.

Функциональная логика

Итак, давайте посмотрим на логику того, что делает функция. Может быть, логика пересчета имеет смысл пропустить случайную функцию, потому что на ее значение не должны влиять другие изменения в электронной таблице?

Изменяется ли значение функции при пересчете, зависит от ее цели и на чем она основана. Расчет постоянных значений всегда будет давать один и тот же результат. Операция, основанная на значениях ячеек, которые не изменились, даст тот же результат.

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

Цель контроля пересчета состоит в том, чтобы всегда отражать текущее состояние вещей при запуске пересчета. Этот критерий не будет соблюден, если функции, основанные на текущем времени, не будут обновлены.

«Случайные» функции, такие как RANDBETWEEN, имеют целью создание нового случайного числа при пересчете. Это то, что они должны делать. Вы можете утверждать, что пересчет может быть пропущен, поскольку на значение не должны влиять другие события, происходящие в электронной таблице.

Если бы это было поведение по умолчанию, вы бы обновляли электронную таблицу, но случайное значение оставалось бы постоянным. Это не очень случайное поведение. Это будет поддерживать один вариант использования, но не другой. Возвращаясь к базовой концепции дизайна, она обрабатывается как любая другая функция. Поведение по умолчанию - Excel пересчитывает его. Если вы хотите сохранить предыдущее значение для своего варианта использования, вы можете сделать это с помощью доступных инструментов.

fixer1234
источник
Это прекрасное объяснение, хотя и приближает меня к ответу, который я ищу, все же оставляет меня неубедительным. Я пытаюсь сгенерировать 25 случайных чисел от 1 до 365; Мне нужно сделать это ДВАДЦАТЬ РАЗ (да, это симуляция «классической» проблемы дня рождения). После того, как я сгенерирую набор из 25 случайных чисел, я бы хотел, чтобы они заморозили его (1), а я сгенерировал другие наборы из 25, и (2), чтобы я мог отсортировать только что сгенерированные 20 наборов. Я могу сделать это, используя обходные пути, предложенные другими здесь, но это довольно трудная задача для многих студентов, изучающих элементарную статистику.
сейчасрадиогу
3
@nowradioguy, в чем ты не уверен? Excel работает определенным образом, и мы застряли с его возможностями и дизайном. По вашему требованию сохранить результаты довольно просто, это нужно сделать несколько раз. Если числа в столбце, выберите и скопируйте набор из 25 за один шаг, затем вставьте специальные значения в ячейку в другом месте. Это всего лишь несколько кликов, вероятно, самый быстрый способ сделать это. Паста, вероятно, вызовет повторный вызов, так что вы готовы повторить. Вы можете сделать 20 подходов за пару минут. Тогда веселитесь с этим. :-)
fixer1234
2

Каждое изменение в рабочем листе запускает автоматический пересчет всех формул, что является поведением по умолчанию.

Вы можете отключить его или заморозить фактическое значение, преобразовав его в чистое значение (в противоположность формуле).

MarianD
источник
1
Я понимаю это, но вы случайно не знаете, ПОЧЕМУ? Нет ничего очевидного в том, почему случайные числа, сгенерированные в конкретной ячейке, будут затронуты операцией, выполняемой в другом месте на этом листе.
сейчасрадиогу
3
Как Excel узнает заранее, если вы хотите случайное значение «для жизни» или если вы хотите изменить его часто? Второй случай более вероятен (так как в противоположном случае вы можете ввести случайное значение непосредственно в ячейку).
MarianD
Ваше утверждение неверно. Автоматический пересчет НЕ вызывает пересчет всех формул. Только когда рабочая тетрадь имеет изменчивые функции.
Тейлин
1

Он классифицируется как «изменчивая» формула и, как таковая, является частью списка функций, пересчитанного при обнаружении изменения или введении новой функции.

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

Солнечный Майк
источник
Я попробовал поискать «изменчивую формулу» в Google, и появилось несколько ссылок, объясняющих, что wghat находится в списке «изменчивых» формул, но нигде не могу найти объяснения, почему RANDBETWEEN - или должна быть - изменчивая формула ,
сейчасрадиогу
1
Можно было бы предположить, потому что это «случайный», поэтому логично, что он будет пересчитываться каждый раз ... Как указано, если вы хотите, чтобы ваше случайное число фиксировалось, у вас есть 2 разных метода - это означает, что оно больше не изменится. Некоторые хорошая информация здесь: decisionmodels.com/calcsecretsi.htm
Solar Mike
Да спасибо; это был один из результатов, которые были найдены в моем поиске в Google, но он не имеет прямого отношения к моему вопросу. Подумайте об этом: если я выполняю несвязанную операцию в другой ячейке и выполняются вычисления, то любые ранее сгенерированные случайные числа генерируются заново и изменяются. Имеет мало смысла для меня.
сейчасрадиогу
Excel пересчитывает значения ячеек, когда событие запускает этот процесс, randbetween классифицируется как энергозависимый (я сделал лист игральных костей для своей дочери, чтобы он пересчитывался каждый раз, когда я нажимаю F9 ...), поэтому он пересчитывается, см. Также здесь: beatexcel.com/ volatile-functions-excel . Если вы хотите, чтобы ранее случайное число перестало изменяться, то есть два способа добиться этого.
Солнечный Майк
@ fixer1234 НЕ ВСЕ изменчиво. Не каждая формула переоценивается, когда что-либо меняется в электронной таблице. Это происходит только в том случае, если рабочая книга содержит изменчивые формулы. Если у вас есть только Sum () или Countif () или что-то подобное, он только пересчитает ячейки, затронутые изменением, а НЕ рабочую книгу.
Тейлин
0

Несмотря на героические усилия, направленные на то, чтобы это звучало как особенность, а не ошибка, я считаю крайне маловероятным, что такое поведение обычно выгодно. «Особенности» делают нашу жизнь проще, а «жуки» - сложнее. В моем случае ввод метки или объяснения в ячейку, на которую не ссылается никакая другая ячейка, вызывает повторную рандомизацию, с которой неудобно иметь дело. Я бы назвал это «ошибкой».

Да, я могу контролировать пересчет вручную (боль) или вставлять значения, чтобы предотвратить его (опять же, боль), но в каких случаях повторная рандомизация, вызванная вводом текста в удаленную область листа, облегчает жизнь?

Даже если за обработкой «изменчивых» функций лежит некоторая логика, может показаться, что тривиально легко инициировать пересчет с помощью соответствующих критериев, помимо простого нажатия «ввод» после ввода текста в несвязанных и не связанных ссылках ячейках или с помощью других совершенно не связанных изменений. Предотвращение этого должно быть по умолчанию, и я не могу себе представить, что это будет трудно реализовать. Если кто-то хочет эту «функцию», он может включить ее, но я не могу себе представить, когда это будет хорошо. В лучшем случае это может быть относительно безвредным. Для меня это большая проблема из-за типа листа, который я создаю.

Наконец, пакет инструментов анализа позволяет создавать распределения случайных чисел различными способами, а созданные таким образом диапазоны чисел вообще не пересчитываются (повторно рандомизируются), если только вы не скажете это сделать. Поэтому я рекомендую людям использовать Пакет инструментов анализа, когда он соответствует их потребностям.

user816299
источник
Добро пожаловать в Супер пользователя. Сайт представляет собой базу знаний о решениях, поэтому ответы на сообщения должны быть сосредоточены на ответах на то, что было задано в вопросе. Почти весь ваш пост на самом деле является сплетнями, мнениями и комментариями, которые могут привлечь отрицательные отзывы, потому что это непродуктивно в рамках сайта. Ваш последний абзац может быть многообещающим. Подумайте об удалении всего остального и расширьте последний абзац, чтобы включить больше «как», может быть, пример. Для новичков в Excel также было бы полезно упомянуть, как загрузить этот инструментарий.
fixer1234