Inne odpowiedzi koncentrują się na mechanice przeliczania i roli funkcji niestabilnych, ale myślę, że to pomija część sedna pytania. Odnosi się do zasad, które zostały zastosowane, ale nie tyle do „dlaczego”. Skupię się na tym.
Zarys projektu
Zacznę od koncepcji projektowej i elementów składowych większości nowoczesnych arkuszy kalkulacyjnych. Istnieje „podział odpowiedzialności”. Funkcje to dedykowane procedury, które wykonują określone zadanie i wykonują je za każdym razem, gdy są o to poproszone. Oddzielnie od tego aplikacja kalkulacyjna kontroluje, kiedy zostanie o to poproszona.
Same funkcje nie zawierają żadnej logiki umożliwiającej ponowne obliczenie lub nieprzeprowadzenie ponownego obliczenia. Charakter wszystkich funkcji Excela polega na wykonywaniu pewnego rodzaju operacji za każdym razem, gdy zostanie do tego wywołany. Żadna funkcja nie ma własnej „pamięci” bieżącej wartości ani historii wcześniejszych obliczeń. Nie ma sposobu, aby wiedzieć, czy po raz pierwszy jest proszony o wykonanie swojej pracy. Dlatego żadna funkcja natywna nie ma możliwości uruchomienia tylko raz. Jeśli jakakolwiek funkcja zostanie ponownie obliczona, zrobi to, do czego została zaprojektowana i wygeneruje nową wartość.
Aplikacja arkusza kalkulacyjnego zawiera pewną inteligencję, która pozwala zaoszczędzić czas, pomijając niepotrzebne ponowne obliczenia (jak opisano w odpowiedzi Teylyna). Tylko raz przeliczanie jest pomijane jest, jeśli aplikacja wie, że wartość danej funkcji nie zostało dotknięte przez zmiany kalkulacyjnych, które spowodowały konieczność ponownego obliczenia rzeczy.
Co jeśli trzeba raz uruchomić funkcję, a następnie zachować jej wartość? Weź przykład tworzenia losowej liczby, a następnie nie zmieniania wyniku. To opisuje tworzenie losowo generowanych stałych i możesz to zrobić za pomocą Excela.
Excel nie może wiedzieć, jak chcesz korzystać z jego możliwości; czy chcesz kontynuować tworzenie nowych wartości, czy zachować ostatni zestaw. Każda opcja jest przypadkiem użycia obsługiwanym przez program Excel. Excel obsługuje oba przypadki, udostępniając narzędzia do obliczania nowych wartości oraz narzędzia do zachowania starych wartości. Możesz zbudować, co chcesz. Ale użytkownik ma obowiązek zrobić to, co chce.
Logika funkcji
Spójrzmy więc na logikę działania funkcji. Czy logika ponownego obliczania może mieć sens, aby pominąć funkcję losową, ponieważ na jej wartość nie powinny mieć wpływu inne zmiany w arkuszu kalkulacyjnym?
To, czy wartość funkcji zmienia się po ponownym obliczeniu, zależy od jej celu i od czego jest oparta. Obliczenia na stałych wartościach zawsze dają ten sam wynik. Operacja oparta na wartościach komórek, które nie uległy zmianie, da ten sam wynik.
Jednak niektóre funkcje zostały zaprojektowane z myślą o celu i za każdym razem generowania innego wyniku. Rozważmy na przykład funkcje oparte na bieżącym czasie. Przyniosą nowy wynik na podstawie czasu ponownego obliczenia. Nie możesz mieć funkcji, której celem jest generowanie wartości na podstawie bieżącego czasu i nie może być aktualizowana po ponownym obliczeniu.
Celem kontroli przeliczania jest zawsze, aby wszystko było odzwierciedlane w bieżącym stanie rzeczy po uruchomieniu przeliczania. To kryterium nie byłoby spełnione, gdyby funkcje oparte na bieżącym czasie nie zostały zaktualizowane.
Funkcje „losowe”, takie jak RANDBETWEEN, mają na celu wygenerowanie nowej liczby losowej po ponownym obliczeniu. Właśnie to zamierzają zrobić. Można argumentować, że ponowne obliczenie może zostać pominięte, ponieważ na wartość nie powinny mieć wpływu inne rzeczy występujące w arkuszu kalkulacyjnym.
Gdyby to było zachowanie domyślne, aktualizowałbyś arkusz kalkulacyjny, ale losowa wartość pozostałaby stała. To niezbyt przypadkowe zachowanie. To by wspierało jeden przypadek użycia, ale nie drugi. Wracając do podstawowej koncepcji projektowej, jest obsługiwany jak każda inna funkcja. Domyślne zachowanie polega na ponownym obliczeniu programu Excel. Jeśli chcesz zachować poprzednią wartość dla swojego przypadku użycia, musisz to zrobić za pomocą dostępnych narzędzi.