Ich muss die RANDBETWEEN-Funktion von Microsoft Excel verwenden und mir ist bewusst, dass jedes Mal, wenn Sie irgendwo anders auf dem Arbeitsblatt etwas anderes tun, ein neuer Satz von Zufallszahlen generiert wird. Mir sind auch die Problemumgehungen bekannt, um eine Reihe von Zufallszahlen "einzufrieren", die beispielsweise zum Sortieren von n Listen von Zufallszahlen zwischen a und b generiert wurden. Meine Frage lautet: WARUM ändern sich die generierten Zufallszahlen? Enthält der Algorithmus etwas, das dies erfordert? FWIW, Google Sheets, LibreOffice Calc und Apple Numbers weisen alle dasselbe Verhalten auf.
microsoft-excel
nowradioguy
quelle
quelle
Antworten:
Charles Williams hat eine gute Erklärung, wie Excel die Dinge berechnet und warum.
http://www.decisionmodels.com/calcsecretsi.htm
Wenn eine Arbeitsmappe flüchtige Funktionen enthält (siehe Charles 'Liste, da sich die flüchtige Funktion im Laufe der Jahre mit verschiedenen Excel-Versionen geändert hat), wird im Wesentlichen eine Neuberechnung der gesamten Arbeitsmappe ausgelöst, wenn eine Zelle in der Arbeitsmappe geändert wird (wenn Excel geändert wird) ist auf automatische Berechnung eingestellt). Wenn die Arbeitsmappe keine flüchtigen Funktionen enthält, werden nur die Zellen neu berechnet, die von der letzten Änderung betroffen sind.
Andere hier haben angegeben, dass die automatische Berechnung immer alles in der Arbeitsmappe berechnet, wenn eine Zelle geändert wird, aber das ist falsch. Nur flüchtige Funktionen bewirken die automatische Neuberechnung aller Zellen in der Arbeitsmappe. Ohne flüchtige Funktionen berechnet Excel nur das neu, was neu berechnet werden muss.
Aus diesem Grund raten Leute wie ich, die den Unterschied kennen, dringend dazu, flüchtige Funktionen wie OFFSET () oder INDIRECT () in Arbeitsblattzellen zu vermeiden, da Molke die Arbeitsmappe verlangsamt, indem sie nach jedem Zellwechsel eine vollständige Neuberechnung veranlasst. Das Erlernen der Verwendung von INDEX () anstelle von OFFSET () kann zu dramatischen Geschwindigkeitsverbesserungen führen, da der Index nicht flüchtig ist (weitere Informationen finden Sie in Charles 'Artikel).
Die Berechnungs-Engine von Excel basiert auf der "recalc or die" -Philosophie, die Excel zu Entwicklungszeiten von Konkurrenzprodukten abhebt. Sehen Sie sich diesen Artikel an: https://www.geekwire.com/2015/recalc-or-die-30-years-later-microsoft-excel-1-0-vets-recount-a-project-that-defied-the -Chancen/
quelle
Andere Antworten konzentrieren sich auf die Mechanik der Neuberechnung und die Rolle flüchtiger Funktionen, aber ich denke, dass dies einen Teil des Kerns der Frage verfehlt. Es behandelt die angewandten Regeln, aber nicht so sehr das "Warum". Ich werde mich darauf konzentrieren.
Design Konzept
Lassen Sie mich mit einem Entwurfskonzept und den Bausteinen der meisten modernen Kalkulationstabellen beginnen. Es gibt eine "Aufteilung der Verantwortung". Funktionen sind dedizierte Routinen, die eine bestimmte Aufgabe ausführen und jedes Mal ausführen, wenn sie gefragt werden. Davon abgesehen steuert die Tabellenkalkulationsanwendung, wann sie gefragt werden.
Die Funktionen selbst enthalten keine Logik zur Auswahl der Neuberechnung oder Nicht-Neuberechnung. Die Art aller Excel-Funktionen besteht darin, eine Art von Operation auszuführen, wann immer dies ausgelöst wird. Keine Funktion hat ein eigenes "Gedächtnis" für ihren aktuellen Wert oder eine Historie ihrer vergangenen Berechnungen. Es kann nicht festgestellt werden, ob es das erste Mal ist, dass es gebeten wird, seine Arbeit zu erledigen. Daher kann keine native Funktion nur einmal ausgeführt werden. Wenn eine Funktion neu berechnet wird, wird das getan, wofür sie entwickelt wurde, und es wird ein neuer Wert erzeugt.
Die Tabellenkalkulationsanwendung enthält einige Informationen, mit denen Sie Zeit sparen können, indem Sie unnötige Neuberechnungen überspringen (wie in der Antwort von teylyn beschrieben). Die einzige Zeit, in der die Neuberechnung übersprungen wird, besteht darin, dass die Anwendung weiß, dass der Wert der Funktion durch die Änderungen in der Tabelle, die eine Neuberechnung erforderlich machten, nicht beeinflusst wurde.
Was ist, wenn eine Funktion einmal ausgeführt werden muss, um ihren Wert zu erhalten? Nehmen Sie das Beispiel einer Zufallszahl, bei der sich das Ergebnis nicht ändert. Das beschreibt das Erstellen zufällig generierter Konstanten, und das können Sie mit Excel tun.
Excel kann nicht wissen, wie Sie seine Funktionen verwenden möchten. ob Sie weiterhin neue Werte erzeugen oder den letzten Satz beibehalten möchten. Jede Option ist ein Anwendungsfall, den Excel unterstützt. Excel berücksichtigt beide Fälle, indem es Ihnen die Tools zur Berechnung neuer Werte und die Tools zur Beibehaltung alter Werte zur Verfügung stellt. Sie können bauen, was Sie wollen. Der Benutzer ist jedoch dafür verantwortlich, dass er das tut, was er will.
Funktionslogik
Schauen wir uns also die Logik für die Funktion an. Könnte es für die Neuberechnungslogik sinnvoll sein, eine Zufallsfunktion zu überspringen, da ihr Wert nicht durch andere Änderungen in der Tabelle beeinflusst werden sollte?
Ob sich der Wert einer Funktion bei einer Neuberechnung ändert oder nicht, hängt von ihrem Zweck ab und davon, worauf sie basiert. Eine Berechnung mit konstanten Werten führt immer zum gleichen Ergebnis. Eine Operation, die auf Zellenwerten basiert, die sich nicht geändert haben, führt zu demselben Ergebnis.
Einige Funktionen wurden jedoch mit der Absicht und dem Zweck entwickelt, jedes Mal ein anderes Ergebnis zu erzielen. Betrachten Sie zum Beispiel Funktionen, die auf der aktuellen Zeit basieren. Sie erzeugen ein neues Ergebnis basierend auf der Zeit bei der Neuberechnung. Sie können keine Funktion haben, deren Zweck es ist, einen Wert basierend auf der aktuellen Zeit zu erzeugen und ihn nicht aktualisieren zu lassen, wenn er neu berechnet wird.
Das Ziel der Neuberechnungskontrolle ist es, immer den aktuellen Stand der Dinge wiederzugeben, wenn eine Neuberechnung ausgelöst wird. Dieses Kriterium wäre nicht erfüllt, wenn Funktionen, die auf der aktuellen Zeit basieren, nicht aktualisiert würden.
Die "Zufalls" -Funktionen haben wie RANDBETWEEN den Zweck, bei einer Neuberechnung eine neue Zufallszahl zu erzeugen. Das ist, was sie tun sollen. Sie könnten argumentieren, dass die Neuberechnung übersprungen werden könnte, da der Wert nicht durch andere Ereignisse in der Tabelle beeinflusst werden sollte.
Wenn dies das Standardverhalten wäre, würden Sie die Tabelle aktualisieren, aber der Zufallswert würde konstant bleiben. Das ist kein sehr zufälliges Verhalten. Das würde einen Anwendungsfall unterstützen, den anderen jedoch nicht. Zurück zum grundlegenden Designkonzept, es wird wie jede andere Funktion gehandhabt. Das Standardverhalten besteht darin, Excel neu berechnen zu lassen. Wenn Sie den vorherigen Wert für Ihren Anwendungsfall beibehalten möchten, müssen Sie dies mit den verfügbaren Tools tun.
quelle
Bei jeder Änderung im Arbeitsblatt wird eine automatische Neuberechnung aller Formeln gestartet. Dies ist das Standardverhalten.
Sie können ihn deaktivieren oder den tatsächlichen Wert einfrieren, indem Sie ihn in einen reinen Wert konvertieren (das Gegenteil einer Formel).
quelle
Es wird als "flüchtige" Formel eingestuft und ist daher Teil der Liste der Funktionen, die neu berechnet werden, wenn eine Änderung festgestellt oder eine neue Funktion eingegeben wird.
Eine weitere Option, die Sie in Betracht ziehen sollten, ist die Umstellung des Arbeitsblatts auf manuelle Berechnung, damit Sie steuern können, wann dies geschieht. Denken Sie jedoch daran, eine Neuberechnung durchzuführen, da Änderungen an Werten oder Formeln keine Neuberechnung verursachen.
quelle
Trotz der heldenhaften Bemühungen, dieses Feature als ein Feature und nicht als einen Bug erscheinen zu lassen, halte ich es für äußerst unwahrscheinlich, dass dieses Verhalten routinemäßig vorteilhaft ist. "Features" machen unser Leben leichter, "Bugs" machen es schwerer. In meinem Fall führt die Eingabe eines Bezeichners oder einer Erklärung in eine Zelle, auf die keine andere Zelle verweist, zu einer unpraktischen Neuzufälligkeit. Ich würde das einen "Bug" nennen.
Ja, ich kann die Neuberechnung manuell steuern (ein Schmerz) oder Werte einfügen, um dies zu verhindern (wieder ein Schmerz). In welchen Fällen erleichtert die durch Texteingabe in einem entfernten Bereich des Blattes verursachte Randomisierung das Leben?
Selbst wenn hinter der Handhabung von "flüchtigen" Funktionen eine Logik steckt, scheint es trivial einfach zu sein, eine Neuberechnung über geeignete Kriterien auszulösen, außer einfach "Enter" zu drücken, nachdem der Text in nicht zusammenhängenden und nicht referenzierten Zellen eingegeben wurde, oder durch andere völlig nicht zusammenhängende Bearbeitungen. Dies zu verhindern sollte der Standard sein und ich kann mir nicht vorstellen, dass es schwierig sein würde, dies umzusetzen. Wenn jemand dieses "Feature" möchte, kann er es aktivieren, aber ich kann mir nicht vorstellen, wann das eine gute Sache wäre. Bestenfalls könnte es relativ harmlos sein. Für mich ist es ein großer Ärger wegen der Art des Blattes, das ich erstelle.
Schließlich - Mit dem Analyse-Toolpaket können Sie Verteilungen von Zufallszahlen auf verschiedene Arten erstellen, und die so erstellten Zahlenbereiche werden nur dann neu berechnet (neu randomisiert), wenn Sie dazu aufgefordert werden. Daher empfehle ich den Benutzern, das Analyse-ToolPak zu verwenden, wenn es ihren Anforderungen entspricht.
quelle