Dlaczego liczby RANDBETWEEN programu Excel zmieniają się dla dowolnej operacji w arkuszu?

14

Muszę użyć funkcji RANDBETWEEN programu Microsoft Excel i jestem świadomy, że nowy zestaw liczb losowych jest generowany za każdym razem, gdy robisz cokolwiek innego w arkuszu. Zdaję sobie również sprawę z obejść tego sposobu, aby „zamrozić” zestaw liczb losowych, który został wygenerowany, powiedzmy, do sortowania n list liczb losowych od a do b. Moje pytanie brzmi: DLACZEGO generowane liczby losowe zmieniają się? Czy w algorytmie jest coś, co tego wymaga? FWIW, Arkusze Google, LibreOffice Calc, Apple Numbers wszystkie wykazują to samo zachowanie.

nowradioguy
źródło
Pytania z „Dlaczego ...?” są często nie na temat, ponieważ prawdopodobnie tylko autor może udzielić jednoznacznej odpowiedzi. Twoje pytanie nie zawiera pożądanej funkcjonalności, więc trudno ci coś zasugerować.
Máté Juhász
2
@ MátéJuhász Wydaje się, że udzielone odpowiedzi pokazują, że nie jest to trudne ...
Solar Mike,
Brak odpowiedzi, ale oto kilka obejść dla tych, którzy jej potrzebują: stackoverflow.com/questions/8011032/…
Adam

Odpowiedzi:

28

Charles Williams ma dobre wyjaśnienie, jak Excel oblicza rzeczy i dlaczego.

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

Zasadniczo, jeśli skoroszyt zawiera zmienne funkcje (zapoznaj się z listą Charlesa, ponieważ zmienna funkcja zmieniła się przez lata w różnych wersjach programu Excel), ponowne obliczenie całego skoroszytu zostanie uruchomione po zmianie dowolnej komórki w skoroszycie (jeśli Excel jest ustawiony na automatyczne obliczenia). Jeśli w skoroszycie nie ma żadnych lotnych funkcji, tylko komórki, na które wpłynęła ostatnia zmiana, zostaną ponownie obliczone.

Inni tutaj stwierdzili, że automatyczne obliczanie zawsze obliczy wszystko w skoroszycie, gdy dowolna komórka zostanie zmieniona, ale to źle. Tylko zmienne funkcje powodują automatyczne ponowne obliczenie wszystkich komórek w skoroszycie. Bez zmiennych funkcji program Excel ponownie oblicza tylko to, co należy ponownie obliczyć.

Dlatego ludzie tacy jak ja, którzy znają różnicę, zdecydowanie zalecają unikanie niestabilnych funkcji, takich jak OFFSET () lub INDIRECT () w komórkach arkusza roboczego, jeśli to możliwe, ponieważ serwatka spowolni skoroszyt, powodując pełne ponowne obliczenie po każdej zmianie komórki. Nauka używania INDEX () zamiast OFFSET () może spowodować radykalne zwiększenie prędkości, ponieważ Indeks nie jest zmienny (więcej szczegółów w artykule Charlesa).

Mechanizm obliczeniowy Excela opiera się na filozofii „recalc or die”, która odróżniała Excela od konkurencyjnych produktów, gdy był w fazie rozwoju. Sprawdź ten artykuł: https://www.geekwire.com/2015/recalc-or-die-30-years-later-microsoft-excel-1-0-vets-recount-a-project-that-defied-the -szansa/

teylyn
źródło
3
Oczywiście, jeśli „funkcja lotna” jest poprawnie zdefiniowana, nie powinno być widocznej różnicy między ponownym obliczaniem wszystkiego a ponownym obliczaniem tylko tego, co jest potrzebne, oprócz prędkości.
hobbs
12

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.

fixer1234
źródło
To dokładne wyjaśnienie, przybliżając mnie do odpowiedzi, której szukam, wciąż mnie nie przekonuje. Próbuję wygenerować 25 liczb losowych od 1 do 365; Muszę to zrobić DWADZIEŚCIA CZASÓW (tak, to symulacja „klasycznego” problemu urodzinowego). Po wygenerowaniu zestawu 25 liczb losowych chciałbym, aby zamrozili go (1), podczas gdy wygeneruję pozostałe zestawy 25 i (2), aby móc posortować 20 zestawów, które właśnie wygenerowałem. Mogę to zrobić za pomocą obejść sugerowanych przez innych w niniejszym dokumencie, ale jest to dość trudna sprawa dla wielu studentów studiujących podstawowe statystyki.
nowradioguy
3
@nowradioguy, o czym nie jesteś przekonany? Excel działa w określony sposób i utknęliśmy w jego możliwościach i projekcie. Zgodnie z Twoimi wymaganiami zachowanie wyników jest dość proste, wystarczy zrobić to kilka razy. Jeśli liczby są w kolumnie, wybierz i skopiuj zestaw 25 w jednym kroku, a następnie wklej wartości specjalne do komórki w innym miejscu. To tylko kilka kliknięć, prawdopodobnie najszybszy sposób na zrobienie tego. Wklej prawdopodobnie spowoduje ponowne przeliczenie, więc możesz powtórzyć. Możesz zrobić 20 zestawów w ciągu kilku minut. Baw się z tym. :-)
fixer1234
2

Każda zmiana w arkuszu uruchamia automatyczne przeliczanie wszystkich formuł, co jest zachowaniem domyślnym.

Możesz go wyłączyć lub zamrozić rzeczywistą wartość, przekształcając ją w czystą wartość (jako przeciwieństwo formuły).

MarianD
źródło
1
Rozumiem to, ale czy mógłbyś wiedzieć DLACZEGO? Nie ma nic oczywistego w tym, dlaczego na liczby losowe wygenerowane w określonej komórce miałaby wpływ operacja wykonana w innym miejscu tego arkusza.
nowradioguy
3
Skąd Excel wiedziałby z góry, czy chcesz losową wartość „na całe życie”, czy też często ją zmieniasz? Drugi przypadek jest tym bardziej prawdopodobny (jak w przeciwnym przypadku możesz wpisać losową wartość bezpośrednio do komórki).
MarianD
Twoje oświadczenie jest błędne. Automatyczne przeliczanie NIE powoduje ponownego obliczania wszystkich formuł. Tylko wtedy, gdy skoroszyt ma zmienne funkcje.
teylyn
1

Jest klasyfikowany jako formuła „lotna” i jako taka jest częścią listy funkcji przeliczanych po wykryciu zmiany lub wprowadzeniu nowej funkcji.

Inną opcją do rozważenia jest przełączenie arkusza na obliczenia ręczne, aby kontrolować, kiedy to się stanie - pamiętaj tylko, aby pamiętać o ponownym obliczeniu, ponieważ wszelkie zmiany wartości lub formuł nie spowodują ponownego obliczenia ...

Solar Mike
źródło
Wypróbowałem „zmienną formułę” Googlinga i pojawia się szereg linków wyjaśniających, że wghat znajduje się na liście „niestabilnych” formuł, ale nigdzie nie mogę znaleźć wyjaśnienia, DLACZEGO RANDBETWEEN jest - lub musi być - zmienną formułą .
nowradioguy
1
Można by założyć, ponieważ jest on „losowy”, więc logiczne jest, że będzie on ponownie obliczany za każdym razem… Jak wskazano, jeśli chcesz, aby twoja liczba losowa została ustalona, ​​masz 2 różne metody - co oznacza, że ​​nie będzie się już zmieniać. Kilka dobrych informacji tutaj: Decisionmodels.com/calcsecretsi.htm
Solar Mike
Tak dziękuję; był to jeden z wyników, który pojawił się w mojej wyszukiwarce Google, ale nie odnosi się bezpośrednio do mojego pytania. Pomyśl o tym: jeśli wykonuję niepowiązaną operację w innej komórce i nastąpi obliczenie, wówczas wszelkie wcześniej wygenerowane liczby losowe są generowane od nowa i zmieniane. To nie ma dla mnie sensu.
nowradioguy
Excel ponownie oblicza wartości komórek, gdy zdarzenie wyzwala ten proces, randbetween jest klasyfikowany jako niestabilny (zrobiłem arkusz kości dla mojej córki, więc jest ponownie obliczany za każdym razem, gdy nacisnę F9 ...), więc jest przeliczany, patrz również tutaj: beatexcel.com/ funkcje lotne-excel . Jeśli chcesz, aby poprzednio losowa liczba przestała się zmieniać, możesz to osiągnąć na dwa sposoby.
Solar Mike,
@ fixer1234 NIE WSZYSTKO jest niestabilne. Nie każda formuła podlega ponownej ocenie, gdy coś zmienia się w arkuszu kalkulacyjnym. Dzieje się tak tylko wtedy, gdy skoroszyt zawiera lotne formuły. Jeśli masz tylko Sum () lub Countif () lub coś takiego, spowoduje to ponowne obliczenie komórek dotkniętych zmianą, NIE skoroszytu wole.
teylyn
0

Pomimo heroicznych wysiłków, aby dźwięk ten brzmiał jak funkcja, a nie błąd, uważam za niezwykle mało prawdopodobne, aby takie zachowanie było rutynowo korzystne. „Funkcje” ułatwiają nam życie, „błędy” utrudniają. W moim przypadku wpisanie etykiety lub wyjaśnienia w komórce, do której nie odwołuje się żadna inna komórka, powoduje ponowną randomizację, z którą trudno sobie poradzić. Nazwałbym to „błędem”.

Tak, mogę ręcznie kontrolować ponowne obliczanie (ból) lub wklejać wartości, aby temu zapobiec (znowu ból), ale w jakich przypadkach ponowna randomizacja spowodowana wprowadzaniem tekstu w odległym obszarze arkusza ułatwia życie?

Nawet jeśli istnieje pewna logika związana z obsługą „niestabilnych” funkcji, wydawałoby się, że banalnie łatwe jest uruchomienie ponownego obliczenia za pomocą odpowiednich kryteriów innych niż zwykłe naciśnięcie „enter” po wpisaniu tekstu w niepowiązanych i niepowiązanych komórkach lub przez inne całkowicie niezwiązane zmiany. Zapobieganie temu powinno być domyślne i nie mogę sobie wyobrazić, że byłoby to trudne do wdrożenia. Jeśli ktoś chce tej „funkcji”, może ją włączyć, ale nie wyobrażam sobie, kiedy byłoby to dobre. W najlepszym razie może być względnie nieszkodliwy. Dla mnie jest to duży problem ze względu na rodzaj arkusza, który tworzę.

Wreszcie - pakiet Analysis Toolpak umożliwia tworzenie rozkładów liczb losowych na różne sposoby, a zakresy tak utworzonych liczb w ogóle nie są ponownie obliczane (ponownie randomizowane), chyba że tak zrobisz. Dlatego zalecam, aby ludzie korzystali z pakietu Analysis ToolPak, gdy spełnia on ich potrzeby.

użytkownik 816299
źródło
Witamy w Super User. Witryna stanowi bazę wiedzy o rozwiązaniach, więc posty z odpowiedziami muszą koncentrować się na odpowiedziach na pytania zadane w pytaniu. Prawie cały Twój post jest naprawdę rantem, opinią i komentarzem, który może przyciągnąć opinie negatywne, ponieważ nie jest produktywny w ramach witryny. Twój ostatni akapit może być obiecujący. Zastanów się nad usunięciem wszystkiego innego i rozwiń ostatni akapit, aby uwzględnić więcej „jak”, być może przykład. Dla początkujących w programie Excel warto również wspomnieć, jak załadować ten pakiet narzędzi.
fixer1234