Чому номери Excel RANDBETWEEN змінюються для будь-якої операції на робочому аркуші?


14

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


Запитання з "Чому ...?" тут часто поза темою, оскільки, ймовірно, лише автор міг дати однозначну відповідь. Ваше запитання не містить потрібної функціональності, тому важко вам щось запропонувати.
Máté Juhász

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 заснована на філософії "recc 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 /


3
Звичайно, якщо "летюча функція" визначена правильно, не повинно бути видимої різниці між перерахунком всього і перерахунком лише того, що потрібно, крім швидкості.
панно

12

Інші відповіді зосереджуються на механіці перерахунку та ролі мінливих функцій, але я думаю, що це не вистачає частини суті питання. У ньому розглядаються застосовані правила, але не стільки "чому". Я зосереджусь на цьому.

Концепція дизайну

Дозвольте розпочати з дизайнерської концепції та складових частин більшості сучасних електронних таблиць. Існує "розподіл відповідальності". Функції - це виділені підпрограми, які виконують конкретне завдання, і виконують це щоразу, коли їх запитують. Окремо від цього програма керує електронними таблицями, коли їх запитують.

Самі функції не містять логіки для перерахунку чи не перерахунку. Характер усіх функцій Excel полягає в тому, щоб виконувати певний тип операцій, коли це робиться для цього. Жодна функція не має власної "пам'яті" свого поточного значення або історії його минулих обчислень. Це не може знати, чи вперше його просять зробити свою роботу. Тож жодна нативна функція не має можливості запускатися лише один раз. Якщо будь-яка функція буде перерахована, вона зробить те, що призначено для виконання, і створить нове значення.

Додаток для електронних таблиць містить деяку інформацію, яка дозволяє економити час, пропускаючи непотрібні перерахунки (як описано у відповіді Тейліна). Тільки час перерахунок пропущений, якщо додаток знає , що значення функції не залежить від змін електронних таблиць , які викликали необхідність перераховувати речі.

Що робити, якщо вам потрібно один раз запустити функцію, а потім зберегти її значення? Візьміть свій приклад отримання випадкового числа, а потім результат не зміниться. Це описує створення випадкових генерованих констант, і ви можете це зробити за допомогою Excel.

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

Логіка функцій

Тож давайте подивимось на логіку того, що робить функція. Чи може мати сенс логіка перерахунку пропускати випадкову функцію, оскільки на її значення не повинні впливати інші зміни електронної таблиці?

Від того, чи змінюється значення функції при перерахунку, залежить від його призначення та на чому ґрунтується. Розрахунок на постійні значення завжди дасть однаковий результат. Операція на основі значень комірок, які не змінилися, дасть такий же результат.

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

Завдання контролю за перерахунком завжди полягає в тому, щоб все відображало поточний стан речей при здійсненні перерахунку. Цей критерій не був би дотриманий, якби функції, засновані на поточному часі, не були оновлені.

"Випадкові" функції, як RANDBETWEEN, мають на меті створити нове випадкове число при перерахунку. Це те, що вони призначені. Ви можете стверджувати, що перерахунок може бути пропущений, оскільки на значення не повинні впливати інші речі, що відбуваються в електронній таблиці.

Якби це було поведінкою за замовчуванням, ви б оновлювали електронну таблицю, але випадкове значення залишалося б постійним. Це не дуже випадкова поведінка. Це підтримувало б один випадок використання, але не інший. Повертаючись до базової дизайнерської концепції, вона обробляється як і будь-яка інша функція. Поводження за замовчуванням полягає в тому, щоб Excel перерахував його. Якщо ви хочете зберегти попереднє значення для вашого випадку використання, вирішувати робити це можна за допомогою доступних інструментів.


Це прекрасне пояснення, хоч і наближає мене до відповіді, яку я шукаю, все ще залишає мене непереконаною. Я намагаюся генерувати 25 випадкових чисел між 1 і 365; Мені потрібно зробити це ДВАДЦЯТИ ЧАСИ (так, це симуляція «класичної» проблеми дня народження). Як тільки я генерую набір з 25 випадкових чисел, я хотів би, щоб вони заморозили його (1), а я генерував інші набори з 25 та (2), щоб я міг сортувати 20 створених нами наборів. Я можу це зробити, використовуючи обхідні шляхи, запропоновані іншими учасниками, але це досить складно, щоб потрапити до багатьох студентів, які вивчають елементарну статистику.
nowradioguy

3
@nowradioguy, в чому ти переконана? Excel працює певним чином, і ми начебто дотримуємося його можливостей та дизайну. Для вашої вимоги зберегти результати досить просто, це просто потрібно зробити багато разів. Якщо числа знаходяться в стовпці, виберіть і скопіюйте набір 25 за один крок, а потім вставте спеціальні значення в комірку в іншому місці. Це лише кілька клацань, мабуть, найшвидший спосіб зробити це. Вставлення, ймовірно, призведе до повторного вибору, тому ви готові повторити. Ви можете зробити 20 комплектів за пару хвилин. Тоді повеселіться. :-)
fixer1234

2

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

Ви можете відключити його або заморозити фактичне значення, перетворивши його в чисте значення (як протилежне формулі).


1
Я це розумію, але чи траплятиметься ви ЧОМУ? Немає нічого очевидного в тому, чому на випадкові числа, згенеровані в певній комірці, впливатиме операція, проведена в іншому місці цього робочого аркуша.
nowradioguy

3
Як би Excel знав заздалегідь, якщо ви хочете випадкове значення "для життя" або якщо ви хочете часто змінювати його? Другий випадок є більш вірогідним (так як у зворотному випадку ви можете ввести випадкове значення безпосередньо в комірку).
MarianD

Ваше твердження неправильне. Автоматичний перерахунок НЕ викликає перерахунку всіх формул. Тільки тоді, коли робоча книжка має мінливі функції.
тейлін

1

Він класифікується як "мінлива" формула і як така є частиною переліку функцій, перерахованих при виявленні змін або введенні нової функції.

Ще один варіант, який слід врахувати, - це переключити аркуш на ручний розрахунок, щоб контролювати його, коли це відбувається - просто переконайтеся, що ви пам'ятаєте про перерахунок, хоча будь-які зміни значень або формул не спричинять перерахунок ...


Я спробував "летючу формулу" Googling, і з'явилася низка посилань, що пояснюють, що є у списку "мінливих" формул, але ніде я не можу знайти пояснення того, ЧОМУ RANDBETWEEN є - або має бути - мінливою формулою .
nowradioguy

1
Можна припустити, що це "випадковий", тому логічно, що він буде перераховувати кожного разу ... Як зазначалося, якщо ви хочете, щоб ваше випадкове число було фіксованим, то у вас є два різні методи - це означає, що воно більше не зміниться. Ось хороша інформація тут: Decisionmodels.com/calcsecretsi.htm
Solar Mike

Так дякую; це був один із результатів, який з’явився в моєму пошуку Google, але це не стосується безпосередньо мого питання. Подумайте про це: якщо я роблю неспоріднену операцію в іншій комірці, і випливає розрахунок, то будь-які випадкові числа, що були раніше, генеруються заново і змінюються. Має сенсу для мене мало.
nowradioguy

Excel перераховує значення комірок, коли подія запускає цей процес, а між ними класифікується як мінливий (я робив кістки для своєї дочки, щоб він перераховував кожного разу, коли я потрапляв у F9 ...), щоб він перераховувався, див. Тут також: beatexcel.com/ летючі-функції-відмінні . Якщо ви хочете, щоб раніше випадкове число перестало змінюватися, то для досягнення цього є два методи.
Сонячний Майк

@ fixer1234 НЕ ВСЕ є мінливим. Не кожна формула переоцінюється, коли щось змінюється на таблиці. Це відбувається лише в тому випадку, якщо робоча книжка містить летючі формули. Якщо у вас є тільки Sum () або Countif () або щось подібне, воно буде лише перерахувати клітини, на які впливає зміна, а не робочу книжку для свин.
тейлін

0

Незважаючи на героїчні зусилля, щоб зробити цей звук як функцію, а не помилку, я вважаю надзвичайно малоймовірною, що така поведінка буває вигідною. "Особливості" полегшують наше життя, "помилки" ускладнюють. У моєму випадку введення мітки чи пояснення у комірку, на яку не посилається жодна інша комірка, спричиняє повторну рандомізацію, незручну для роботи. Я б назвав це «помилкою».

Так, я можу керувати перерахунком вручну (біль) або можу вставити значення, щоб запобігти (знову-таки біль), але в яких випадках повторна рандомізація, викликана введенням тексту у віддалену область аркуша, полегшує життя?

Навіть якщо в обробці "мінливих" функцій лежить певна логіка, здається, що тривильно легко здійснити перерахунок за допомогою відповідних критеріїв, крім того, щоб просто натиснути "ввести" після введення тексту у незв'язані і невідредаговані комірки або за допомогою інших абсолютно не пов'язаних змін. Попередження, що це повинно бути типовим, і я не можу уявити, що це буде важко здійснити. Якщо хтось хоче цю "функцію", то він може її ввімкнути, але я не можу уявити, коли це було б добре. У кращому випадку це може бути відносно нешкідливим. Для мене це великі клопоти через тип аркуша, який я створюю.

Нарешті - Пакет інструментів аналізу дозволяє створювати розподіли випадкових чисел різними способами, а діапазони чисел, створені таким чином, взагалі не перераховують (повторно рандомізують), якщо ви не скажете це зробити. Тому я рекомендую людям користуватися інструментом аналізу ToolPak, коли це відповідає їх потребам.


Ласкаво просимо до Супер Користувача. Сайт є базою знань для рішень, тому у публікаціях відповідей потрібно орієнтуватися на відповіді на те, що було задано у запитанні. Майже весь ваш пост - це справді скандал, думка та коментар, який, ймовірно, приверне дорікання, оскільки він не продуктивний в рамках сайту. Ваш останній абзац може бути багатообіцяючим. Подумайте про видалення всього іншого, а останній абзац розгорніть, щоб включити більше "як", можливо, приклад. Для початківців Excel також було б корисно згадати, як завантажити цей пакет інструментів.
fixer1234
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.