Perché Excel RANDBETWEEN cambia per qualsiasi operazione sul foglio di lavoro?


14

Ho bisogno di utilizzare la funzione RANDBETWEEN di Microsoft Excel e sono consapevole che viene generato un nuovo set di numeri casuali ogni volta che fai qualsiasi altra cosa ovunque sul foglio di lavoro. Sono anche a conoscenza delle soluzioni alternative per "congelare" un insieme di numeri casuali che è stato generato, diciamo, per ordinare n elenchi di numeri casuali tra aeb. La mia domanda è questa: PERCHÉ cambiano i numeri casuali generati? C'è qualcosa nell'algoritmo che lo richiede? FWIW, Fogli Google, LibreOffice Calc, Apple Numbers mostrano tutti lo stesso comportamento.


Domande con "Perché ...?" sono spesso fuori tema qui come probabilmente solo l'autore potrebbe dare una risposta definitiva. La tua domanda non contiene la funzionalità desiderata, quindi è difficile suggerirti qualcosa.
Máté Juhász,

2
@ MátéJuhász Sembra che le risposte fornite dimostrino che non è difficile ...
Solar Mike,

Non è una risposta, ma ecco un paio di soluzioni alternative per coloro che ne hanno bisogno: stackoverflow.com/questions/8011032/…
Adam

Risposte:


28

Charles Williams ha una buona spiegazione di come Excel calcola le cose e perché.

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

In sostanza, se una cartella di lavoro contiene funzioni volatili (fare riferimento all'elenco Charles, poiché quella che è una funzione volatile è cambiata nel corso degli anni con diverse versioni di Excel), verrà attivato un ricalcolo di tutta la cartella di lavoro quando viene cambiata una cella della cartella di lavoro (se Excel è impostato sul calcolo automatico). Se non ci sono funzioni volatili nella cartella di lavoro, verranno ricalcolate solo le celle interessate dall'ultima modifica.

Altri qui hanno affermato che il calcolo automatico calcolerà sempre tutto nella cartella di lavoro quando viene cambiata una cella, ma è sbagliato. Solo le funzioni volatili causano il ricalcolo automatico di tutte le celle della cartella di lavoro. Senza funzioni volatili, Excel ricalcola solo ciò che deve essere ricalcolato.

Ecco perché le persone come me, che conoscono la differenza, consigliano vivamente di evitare funzioni volatili come OFFSET () o INDIRECT () nelle celle del foglio di lavoro, se possibile, poiché il siero di latte rallenterà la cartella di lavoro causando un ricalcolo completo dopo ogni cambio di cella. Imparare a usare INDEX () anziché OFFSET () può comportare notevoli miglioramenti della velocità, poiché Index non è volatile (vedere l'articolo di Charles per maggiori dettagli).

Il motore di calcolo di Excel si basa sulla filosofia "ricalcola o muori" che distingue Excel dai prodotti concorrenti quando era in fase di sviluppo. Dai un'occhiata a questo articolo: https://www.geekwire.com/2015/recalc-or-die-30-years-later-microsoft-excel-1-0-vets-recount-a-project-that-defied-the -probabilità/


3
Naturalmente, se la "funzione volatile" è definita correttamente, non dovrebbe esserci alcuna differenza visibile tra ricalcolare tutto e ricalcolare solo ciò che è necessario, a parte la velocità.
Hobbs,

12

Altre risposte si concentrano sulla meccanica del ricalcolo e sul ruolo delle funzioni volatili, ma penso che manchi parte dell'essenza della domanda. Si rivolge alle regole che sono state impiegate ma non tanto al "perché". Mi concentrerò su quello.

Idea di design

Vorrei iniziare con un concetto di design e gli elementi costitutivi della maggior parte dei fogli di calcolo moderni. C'è una "divisione di responsabilità". Le funzioni sono routine dedicate che eseguono un'attività specifica e lo fanno ogni volta che vengono richieste. Separatamente da ciò, l'applicazione del foglio di calcolo controlla quando viene richiesta.

Le funzioni stesse non contengono alcuna logica per scegliere di ricalcolare o non ricalcolare. La natura di tutte le funzioni di Excel consiste nell'eseguire un tipo di operazione ogni volta che viene attivato. Nessuna funzione ha la sua "memoria" del suo valore attuale o una cronologia dei suoi calcoli passati. Non ha modo di sapere se è la prima volta che gli viene chiesto di fare il suo lavoro. Quindi nessuna funzione nativa ha la possibilità di essere eseguita una sola volta. Se una funzione viene ricalcolata, farà ciò per cui è progettata e produce un valore nuovo.

L'applicazione per fogli di calcolo contiene alcune informazioni che consentono di risparmiare tempo saltando i ricalcoli inutili (come descritto nella risposta di Teylyn). L' unica volta che il ricalcolo viene ignorato è se l'applicazione sa che il valore della funzione non è stato influenzato dalle modifiche del foglio di calcolo che hanno innescato la necessità di ricalcolare le cose.

Quindi cosa succede se è necessario eseguire una funzione una volta e preservarne il valore? Prendi il tuo esempio di produzione di un numero casuale e quindi il risultato non cambia. Questo descrive la creazione di costanti generate casualmente e puoi farlo con Excel.

Excel non può sapere come si desidera utilizzare le sue capacità; se si desidera continuare a produrre nuovi valori o conservare l'ultimo set. Ogni opzione è un caso d'uso supportato da Excel. Excel soddisfa entrambi i casi fornendo gli strumenti per calcolare nuovi valori e gli strumenti per preservare i vecchi valori. Puoi costruire quello che vuoi. Ma l'utente ha la responsabilità di farlo fare quello che vuole.

Logica delle funzioni

Diamo quindi un'occhiata alla logica per ciò che fa la funzione. Potrebbe avere senso per la logica di ricalcolo saltare una funzione casuale perché il suo valore non dovrebbe essere influenzato da altre modifiche nel foglio di calcolo?

La modifica del valore di una funzione al momento del ricalcolo dipende dal suo scopo e da cosa si basa. Un calcolo su valori costanti produrrà sempre lo stesso risultato. Un'operazione basata su valori di cella che non sono stati modificati produrrà lo stesso risultato.

Tuttavia, alcune funzioni sono progettate con l'intenzione e lo scopo di produrre ogni volta un risultato diverso. Si consideri, ad esempio, le funzioni basate sull'ora corrente. Produrranno un nuovo risultato basato sul tempo al ricalcolo. Non è possibile avere una funzione il cui scopo è produrre un valore basato sull'ora corrente e non aggiornarlo quando viene ricalcolato.

L'obiettivo del controllo di ricalcolo è di fare in modo che tutto rifletta lo stato attuale delle cose quando viene attivato il ricalcolo. Tale criterio non sarebbe soddisfatto se le funzioni basate sull'ora corrente non fossero aggiornate.

Le funzioni "casuali", come RANDBETWEEN, hanno lo scopo di produrre un nuovo numero casuale quando vengono ricalcolate. Ecco cosa sono destinati a fare. Si potrebbe sostenere che il ricalcolo potrebbe essere ignorato perché il valore non dovrebbe essere influenzato da altre cose che accadono sul foglio di calcolo.

Se quello fosse il comportamento predefinito, aggiorneresti il ​​foglio di calcolo, ma il valore casuale rimarrebbe costante. Questo non è un comportamento molto casuale. Ciò sosterrebbe un caso d'uso ma non l'altro. Tornando al concetto di design di base, viene gestito come qualsiasi altra funzione. Il comportamento predefinito è che Excel lo ricalcoli. Se si desidera conservare il valore precedente per il proprio caso d'uso, spetta a voi farlo con gli strumenti disponibili.


Questa bella spiegazione, mentre mi avvicina alla risposta che cerco, non mi convince ancora. Sto cercando di generare 25 numeri casuali tra 1 e 365; Devo fare questo VENTI VOLTE (sì, è una simulazione del problema del compleanno "classico"). Una volta generato un set di 25 numeri casuali, vorrei che lo congelassero (1) mentre generavo gli altri set di 25 e (2) in modo da poter ordinare i 20 set che ho appena generato. Posso farlo usando soluzioni alternative suggerite da altri qui, ma questo è piuttosto un lavoro ingrato per comunicare a molti studenti che studiano statistiche elementari.
nowradioguy,

3
@nowradioguy, qual è la parte di cui non sei convinto? Excel funziona in un certo modo e siamo un po 'bloccati con le sue capacità e il design. Per le tue esigenze, preservare i risultati è piuttosto semplice, deve solo essere fatto un sacco di volte. Se i numeri sono in una colonna, seleziona e copia l'insieme di 25 in un unico passaggio, quindi incolla i valori speciali in una cella in un altro punto. Sono solo pochi clic, probabilmente il modo più veloce per farlo. L'incolla probabilmente attiverà un ricalcolo, quindi sei pronto per ripetere. Puoi fare 20 set in un paio di minuti. Allora divertiti con esso. :-)
fixer1234

2

Ogni modifica al foglio di lavoro avvia il ricalcolo automatico di tutte le formule, che è il comportamento predefinito.

È possibile disabilitarlo o congelare il valore effettivo convertendolo in valore puro (come l'opposto di una formula).


1
Lo capisco, ma ti capita di sapere PERCHÉ? Non c'è nulla di ovvio sul perché un numero casuale generato in una particolare cella venga influenzato da un'operazione eseguita altrove in quel foglio di lavoro.
nowradioguy,

3
Come può Excel sapere in anticipo se si desidera un valore casuale "per tutta la vita" o se si desidera cambiarlo frequentemente? Il secondo caso è il più probabile (come nel caso opposto è possibile digitare il valore casuale direttamente nella cella).
MarianD,

La tua affermazione è sbagliata. Il ricalcolo automatico NON causa il ricalcolo di tutte le formule. Solo quando la cartella di lavoro ha funzioni volatili.
teylyn,

1

È classificata come formula "volatile" e come tale fa parte dell'elenco di funzioni ricalcolate quando viene rilevata una modifica o viene immessa una nuova funzione.

Un'altra opzione da considerare è quella di passare il foglio al calcolo manuale in modo da controllare quando succede: assicurati di ricordarti di ricalcolare anche se eventuali modifiche ai valori o alle formule non causeranno un ricalcolo ...


Ho provato la "formula volatile" di Google e ho trovato una serie di collegamenti che spiegano wghat che è nell'elenco delle formule "volatili", ma da nessuna parte posso trovare una spiegazione del perché il RANDBETWEEN sia - o debba essere - una formula volatile .
nowradioguy,

1
Si potrebbe presumere perché è "casuale", quindi è logico che si ricalcolerà ogni volta ... Come sottolineato se si desidera che il numero casuale sia fissato, si hanno 2 metodi diversi, il che significa che non cambierà più. Alcune buone informazioni qui: decisionmodels.com/calcsecretsi.htm
Solar Mike

Si Grazie; quello è stato uno dei risultati emersi dalla mia ricerca su Google, ma non risponde direttamente alla mia domanda. Pensaci: se sto eseguendo un'operazione non correlata in un'altra cella e ne deriva un calcolo, tutti i numeri casuali precedentemente generati vengono generati di nuovo e cambiati. Ha poco senso per me.
nowradioguy,

Excel ricalcola i valori delle celle quando un evento attiva quel processo, randb Between è classificato come volatile (ho fatto un foglio di dadi per mia figlia, quindi viene ricalcolato ogni volta che premo F9 ...) quindi viene ricalcolato, vedi anche qui: beatexcel.com/ volatile-funzioni-eccellere . Se vuoi che un numero precedentemente casuale smetta di cambiare, ci sono due metodi per ottenerlo.
Solar Mike,

@ fixer1234 NON TUTTO è volatile. Non tutte le formule vengono rivalutate quando qualcosa cambia in un foglio di calcolo. Ciò accade solo se la cartella di lavoro contiene formule volatili. Se hai solo Sum () o Countif () o qualcosa del genere, ricalcolerà solo le celle interessate da una modifica, NON la cartella di lavoro completa.
teylyn,

0

Nonostante gli sforzi eroici per rendere questo suono come una caratteristica e non un bug, trovo estremamente improbabile che questo comportamento sia routinariamente vantaggioso. Le "caratteristiche" ci semplificano la vita, i "bug" lo rendono più difficile. Nel mio caso, inserire un'etichetta o una spiegazione in una cella a cui non fa riferimento qualsiasi altra cella provoca una ri-randomizzazione che è scomoda da gestire. Lo definirei un "bug".

Sì, posso controllare manualmente il ricalcolo (un dolore) o incollare i valori per prevenirlo (di nuovo, un dolore), ma in quali casi la ri-randomizzazione causata dall'inserimento di testo in una regione remota del foglio semplifica la vita?

Anche se c'è qualche logica dietro la gestione di funzioni "volatili", sembrerebbe banalmente facile innescare il ricalcolo tramite criteri appropriati oltre a premere semplicemente "invio" dopo l'immissione di testo in celle non correlate e non referenziate, o con altre modifiche completamente non correlate. Prevenire che dovrebbe essere l'impostazione predefinita e non riesco a immaginare che sarebbe difficile da implementare. Se qualcuno vuole quella "funzione", può attivarla, ma non riesco a immaginare quando sarebbe una buona cosa. Nella migliore delle ipotesi, potrebbe essere relativamente innocuo. Per me, è una grande seccatura a causa del tipo di foglio che sto creando.

Infine, Analysis Toolpak ti consente di creare distribuzioni di numeri casuali in vari modi e gli intervalli di numeri così creati non vengono ricalcolati (ri-randomizzati), a meno che tu non gli dica di farlo. Quindi consiglio alle persone di utilizzare Analysis ToolPak quando soddisfa le loro esigenze.


Benvenuto in Super User. Il sito è una base di conoscenza di soluzioni, quindi i post delle risposte devono concentrarsi sulle risposte a ciò che è stato posto nella domanda. Quasi tutto il tuo post è in realtà un rant, un'opinione e un commento, che probabilmente attirerà downvotes perché non è produttivo all'interno della struttura del sito. Il tuo ultimo paragrafo potrebbe essere promettente. Prendi in considerazione la possibilità di rimuovere tutto il resto ed espandi l'ultimo paragrafo per includere più del "come", forse un esempio. Per i neofiti di Excel, sarebbe anche utile menzionare come caricare quel toolpak.
fixer1234,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.