Warum ändern sich die RANDBETWEEN-Zahlen in Excel bei jeder Operation im Arbeitsblatt?

Warum ändern sich die RANDBETWEEN-Zahlen in Excel bei jeder Operation im Arbeitsblatt?

Ich muss die Funktion RANDBETWEEN von Microsoft Excel verwenden und bin mir bewusst, dass jedes Mal, wenn ich irgendwo auf dem Arbeitsblatt etwas anderes mache, ein neuer Satz Zufallszahlen generiert wird. Ich kenne auch die Workarounds, um einen Satz Zufallszahlen, der generiert wurde, „einzufrieren“, beispielsweise zum Sortieren von n Listen mit Zufallszahlen zwischen a und b. Meine Frage ist: WARUM ändern sich die generierten Zufallszahlen? Gibt es etwas im Algorithmus, das dies erforderlich macht? FWIW, Google Sheets, LibreOffice Calc, Apple Numbers weisen alle dasselbe Verhalten auf.

Antwort1

Charles Williams erklärt gut, wie und warum Excel Berechnungen durchführt.

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

Wenn eine Arbeitsmappe volatile Funktionen enthält (siehe Charles‘ Liste, da sich die Definition volatiler Funktionen im Laufe der Jahre mit verschiedenen Excel-Versionen geändert hat), wird im Wesentlichen eine Neuberechnung der gesamten Arbeitsmappe ausgelöst, wenn eine beliebige Zelle in der Arbeitsmappe geändert wird (sofern Excel auf automatische Berechnung eingestellt ist). Wenn die Arbeitsmappe keine volatilen Funktionen enthält, werden nur die Zellen neu berechnet, die von der letzten Änderung betroffen sind.

Andere haben hier behauptet, dass die automatische Berechnung immer alles in der Arbeitsmappe neu 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.

Deshalb raten Leute wie ich, die den Unterschied kennen, dringend, volatile Funktionen wie OFFSET() oder INDIRECT() in Arbeitsblattzellen möglichst zu vermeiden, da sie die Arbeitsmappe verlangsamen, da sie nach jeder Zelländerung eine vollständige Neuberechnung verursachen. Wenn Sie lernen, INDEX() anstelle von OFFSET() zu verwenden, können Sie die Geschwindigkeit drastisch verbessern, da Index nicht volatil ist (weitere Einzelheiten finden Sie in Charles‘ Artikel).

Die Berechnungs-Engine von Excel basiert auf der Philosophie „Neu berechnen oder sterben“, die Excel bei seiner Entwicklung von Konkurrenzprodukten unterschied. Lesen Sie diesen Artikel:https://www.geekwire.com/2015/recalc-or-die-30-years-later-microsoft-excel-1-0-vets-recount-a-project-that-defied-the-odds/

Antwort2

Andere Antworten konzentrieren sich auf die Mechanik der Neuberechnung und die Rolle volatiler Funktionen, aber ich denke, dabei wird ein Teil des Kerns der Frage verfehlt. Es geht um die Regeln, die angewendet wurden, aber nicht so sehr um das „Warum“. Darauf werde ich mich konzentrieren.

Design Konzept

Lassen Sie mich mit einem Designkonzept und den Bausteinen der meisten modernen Tabellenkalkulationen beginnen. Es gibt eine „Aufteilung der Verantwortung“. Funktionen sind dedizierte Routinen, die eine bestimmte Aufgabe ausführen und dies jedes Mal tun, wenn sie dazu aufgefordert werden. Davon abgesehen steuert die Tabellenkalkulationsanwendung, wann sie dazu aufgefordert werden.

Die Funktionen selbst enthalten keine Logik, die eine Neuberechnung oder Nicht-Neuberechnung ermöglicht. Die Natur aller Excel-Funktionen besteht darin, eine Art Operation auszuführen, wenn sie dazu aufgefordert werden. Keine Funktion hat ein eigenes „Gedächtnis“ ihres aktuellen Werts oder einen Verlauf ihrer vergangenen Berechnungen. Sie kann nicht wissen, ob sie zum ersten Mal aufgefordert wird, ihre Aufgabe auszuführen. Daher kann keine native Funktion nur einmal ausgeführt werden. Wenn eine Funktion neu berechnet wird, tut sie das, wofür sie entwickelt wurde, und erzeugt einen neuen Wert.

Die Tabellenkalkulationsanwendung enthält eine gewisse Intelligenz, die es ihr ermöglicht, Zeit zu sparen, indem unnötige Neuberechnungen übersprungen werden (wie in Teylyns Antwort beschrieben). DienurDie Neuberechnung wird übersprungen, wenn die Anwendung weiß, dass der Wert der Funktion nicht von den Änderungen in der Tabelle betroffen war, die die Neuberechnung erforderlich gemacht haben.

Was also, wenn Sie eine Funktion einmal ausführen und dann ihren Wert beibehalten müssen? Nehmen Sie Ihr Beispiel, bei dem eine Zufallszahl erzeugt wird und das Ergebnis sich dann 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 nutzen möchten; ob Sie weiterhin neue Werte erstellen oder den letzten Satz beibehalten möchten. Jede Option ist ein Anwendungsfall, den Excel unterstützt. Excel unterstützt beide Fälle, indem es Ihnen die Tools zum Berechnen neuer Werte und die Tools zum Beibehalten alter Werte zur Verfügung stellt. Sie können alles erstellen, was Sie möchten. Aber der Benutzer ist dafür verantwortlich, dass es das tut, was er möchte.

Funktionslogik

Schauen wir uns also die Logik hinter der Funktion an. Wäre es für die Neuberechnungslogik sinnvoll, 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, hängt von ihrem Zweck und ihrer Grundlage ab. Eine Berechnung mit konstanten Werten führt immer zum gleichen Ergebnis. Eine Operation mit unveränderten Zellwerten führt zum gleichen Ergebnis.

Einige Funktionen sind jedoch mit der Absicht und dem Zweck konzipiert, jedes Mal ein anderes Ergebnis zu erzeugen. Betrachten Sie beispielsweise 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 darin besteht, einen Wert basierend auf der aktuellen Zeit zu erzeugen und diesen bei der Neuberechnung nicht zu aktualisieren.

Das Ziel der Neuberechnungssteuerung besteht darin, dass bei Auslösung der Neuberechnung immer alles den aktuellen Stand widerspiegelt. Dieses Kriterium wäre nicht erfüllt, wenn Funktionen, die auf der aktuellen Zeit basieren, nicht aktualisiert würden.

Die „Zufalls“-Funktionen, wie RANDBETWEEN, haben den Zweck, bei der Neuberechnung eine neue Zufallszahl zu erzeugen. Dafür sind sie gedacht. Man könnte argumentieren, dass die Neuberechnung übersprungen werden könnte, da der Wert nicht durch andere Dinge beeinflusst werden sollte, die in der Tabelle passieren.

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. Dies würde einen Anwendungsfall unterstützen, den anderen jedoch nicht. Um auf das grundlegende Designkonzept zurückzukommen: Es wird wie jede andere Funktion behandelt. Das Standardverhalten besteht darin, dass Excel es neu berechnet. Wenn Sie den vorherigen Wert für Ihren Anwendungsfall beibehalten möchten, können Sie dies mit den verfügbaren Tools tun.

Antwort3

Jede Änderung im Arbeitsblatt startetAutomatische Neuberechnungaller Formeln, was das Standardverhalten ist.

Sie können es deaktivieren oder den tatsächlichen Wert einfrieren, indem Sie ihn in einen reinen Wert umwandeln (als Gegenteil einer Formel).

Antwort4

Trotz der heroischen Bemühungen, dies wie ein Feature und nicht wie einen Bug klingen zu lassen, halte ich es für äußerst unwahrscheinlich, dass dieses Verhalten routinemäßig von Vorteil ist. „Features“ machen unser Leben einfacher, „Bugs“ erschweren es. In meinem Fall führt die Eingabe einer Beschriftung oder Erklärung in eine Zelle, auf die von keiner anderen Zelle verwiesen wird, zu einer erneuten Randomisierung, die umständlich zu handhaben ist. Ich würde das einen „Bug“ nennen.

Ja, ich kann die Neuberechnung manuell steuern (was mühsam ist) oder ich kann Werte einfügen, um sie zu verhindern (auch dies ist mühsam), aber in welchen Fällen macht eine erneute Randomisierung durch die Eingabe von Text in einen entfernten Bereich des Blatts das Leben einfacher?

Selbst wenn hinter der Handhabung „flüchtiger“ Funktionen eine gewisse Logik steckt, wäre es doch trivial einfach, eine Neuberechnung über geeignete Kriterien auszulösen, anstatt einfach nach der Texteingabe in nicht verwandten und nicht referenzierten Zellen oder durch andere völlig unabhängige Bearbeitungen die Eingabetaste zu drücken. Dies zu verhindern, sollte die Standardeinstellung sein, und ich kann mir nicht vorstellen, dass die Implementierung schwierig wäre. Wenn jemand diese „Funktion“ möchte, kann er sie 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 aufgrund der Art des Blatts, das ich erstelle, ein großer Aufwand.

Abschließend: Mit dem Analyse-ToolPak können Sie auf verschiedene Weise Zufallszahlenverteilungen erstellen. Die so erstellten Zahlenbereiche werden nicht neu berechnet (neu randomisiert), es sei denn, Sie weisen es an, dies zu tun. Ich empfehle daher, das Analyse-ToolPak zu verwenden, wenn es Ihren Anforderungen entspricht.

verwandte Informationen