Mengapa angka Excel RANDBETWEEN berubah untuk operasi apa pun di lembar kerja?


14

Saya perlu menggunakan fungsi RANDBETWEEN dari Microsoft Excel, dan saya sadar bahwa serangkaian angka acak baru dihasilkan setiap kali Anda melakukan hal lain di lembar kerja. Saya juga mengetahui solusinya untuk "membekukan" satu set angka acak yang telah dihasilkan, katakanlah, untuk mengurutkan n daftar nomor acak antara a dan b. Pertanyaan saya adalah ini: MENGAPA nomor acak yang dihasilkan berubah? Apakah ada sesuatu dalam algoritma yang mengharuskan ini? FWIW, Google Sheets, LibreOffice Calc, Apple Numbers menunjukkan perilaku yang sama.


Pertanyaan dengan "Kenapa ...?" sering di luar topik di sini karena mungkin hanya penulis yang bisa memberikan jawaban yang pasti. Pertanyaan Anda tidak mengandung fungsionalitas yang diinginkan, jadi sulit untuk menyarankan Anda apa pun.
Máté Juhász

2
@ MátéJuhász Tampaknya jawaban yang diberikan menunjukkan bahwa itu tidak sulit ...
Solar Mike

Bukan jawaban, tapi inilah beberapa solusi untuk mereka yang membutuhkannya: stackoverflow.com/questions/8011032/…
Adam

Jawaban:


28

Charles Williams memiliki penjelasan yang bagus tentang bagaimana Excel menghitung berbagai hal dan mengapa.

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

Pada dasarnya, jika buku kerja berisi fungsi volatil (lihat daftar Charles, karena apa fungsi volatile telah berubah selama bertahun-tahun dengan versi Excel yang berbeda), seluruh perhitungan workbook akan dipicu ketika ada sel di buku kerja yang diubah (jika Excel diatur ke perhitungan otomatis). Jika tidak ada fungsi volatil di buku kerja, hanya sel yang dipengaruhi oleh perubahan terakhir yang akan dihitung ulang.

Yang lain di sini telah menyatakan bahwa perhitungan otomatis akan selalu menghitung semua yang ada di buku kerja ketika sel apa pun diubah, tetapi itu salah. Hanya fungsi volatil yang menyebabkan perhitungan ulang otomatis semua sel di buku kerja. Tanpa fungsi volatil, Excel hanya menghitung ulang apa yang perlu dihitung ulang.

Itulah sebabnya orang-orang seperti saya, yang tahu perbedaannya, sangat menyarankan untuk menghindari fungsi volatil seperti OFFSET () atau INDIRECT () dalam sel lembar kerja jika memungkinkan, karena whey akan memperlambat buku kerja dengan menyebabkan perhitungan ulang penuh setelah setiap perubahan sel. Belajar menggunakan INDEX () alih-alih OFFSET () dapat menghasilkan peningkatan kecepatan yang dramatis, karena Indeks tidak mudah berubah (lihat artikel Charles untuk detail lebih lanjut).

Mesin perhitungan Excel didasarkan pada filosofi "recalc or die" yang membedakan Excel dari produk pesaing ketika sedang dikembangkan. Lihat artikel ini: https://www.geekwire.com/2015/recalc-or-die-30-years-later-microsoft-excel-1-0-vets-recount-a-project-a-project-that-defied-the -odds /


3
Tentu saja, jika "fungsi volatil" didefinisikan dengan benar, seharusnya tidak ada perbedaan yang terlihat antara menghitung ulang semuanya dan menghitung ulang hanya apa yang dibutuhkan, selain dari kecepatan.
hobbs

12

Jawaban lain fokus pada mekanisme perhitungan ulang dan peran fungsi volatile, tapi saya pikir itu meleset dari inti pertanyaan. Ini membahas aturan-aturan yang telah digunakan tetapi tidak begitu banyak "mengapa". Saya akan fokus pada hal itu.

Konsep desain

Mari saya mulai dengan konsep desain dan blok bangunan spreadsheet paling modern. Ada "pembagian tanggung jawab". Fungsi adalah rutinitas khusus yang melakukan tugas tertentu, dan melakukannya setiap kali diminta. Terpisah dari itu, aplikasi spreadsheet mengontrol kapan mereka diminta.

Fungsi itu sendiri, tidak mengandung logika untuk memilih untuk menghitung ulang atau tidak menghitung ulang. Sifat semua fungsi Excel adalah melakukan beberapa jenis operasi kapan pun dipicu untuk melakukannya. Tidak ada fungsi yang memiliki "memori" sendiri dari nilai saat ini, atau riwayat dari kalkulasi sebelumnya. Tidak ada cara untuk mengetahui apakah ini pertama kali diminta melakukan tugasnya. Jadi tidak ada fungsi asli yang memiliki kemampuan untuk menjalankan hanya sekali. Jika ada fungsi yang dihitung ulang, itu akan melakukan apa yang dirancang untuk dilakukan dan menghasilkan nilai baru.

Aplikasi spreadsheet memang mengandung beberapa kecerdasan yang memungkinkannya menghemat waktu dengan melewatkan perhitungan ulang yang tidak perlu (seperti yang dijelaskan dalam jawaban teylyn). Satu- satunya waktu perhitungan ulang dilewati adalah jika aplikasi tahu bahwa nilai fungsi tidak terpengaruh oleh perubahan spreadsheet yang memicu kebutuhan untuk menghitung ulang hal-hal.

Jadi bagaimana jika Anda perlu menjalankan fungsi sekali dan kemudian mempertahankan nilainya? Ambil contoh Anda menghasilkan angka acak dan kemudian hasilnya tidak berubah. Itu menjelaskan membuat konstanta yang dibuat secara acak, dan Anda bisa melakukannya dengan Excel.

Excel tidak bisa tahu bagaimana Anda ingin menggunakan kemampuannya; apakah Anda ingin terus menghasilkan nilai-nilai baru atau mempertahankan set terakhir. Setiap opsi adalah use case yang didukung Excel. Excel mengakomodasi kedua kasus dengan memberi Anda alat untuk menghitung nilai baru, dan alat untuk mempertahankan nilai lama. Anda dapat membangun apa pun yang Anda inginkan. Tetapi pengguna memiliki tanggung jawab untuk membuatnya melakukan apa yang mereka inginkan.

Logika fungsi

Jadi mari kita lihat logika untuk apa fungsinya. Mungkinkah masuk akal bagi logika penghitungan ulang untuk melewati fungsi acak karena nilainya tidak boleh dipengaruhi oleh perubahan lain dalam spreadsheet?

Nilai atau tidak fungsi berubah pada perhitungan ulang tergantung pada tujuannya dan berdasarkan apa. Penghitungan nilai konstan akan selalu menghasilkan hasil yang sama. Operasi berdasarkan nilai sel yang belum berubah akan menghasilkan hasil yang sama.

Namun, beberapa fungsi dirancang dengan maksud dan tujuan menghasilkan hasil yang berbeda setiap saat. Pertimbangkan, misalnya, fungsi berdasarkan waktu saat ini. Mereka akan menghasilkan hasil baru berdasarkan waktu perhitungan ulang. Anda tidak dapat memiliki fungsi yang tujuannya adalah untuk menghasilkan nilai berdasarkan waktu saat ini dan tidak memperbaruinya saat dihitung ulang.

Tujuan kontrol perhitungan ulang adalah untuk selalu membuat segala sesuatu mencerminkan keadaan saat ini ketika perhitungan kembali dipicu. Kriteria itu tidak akan terpenuhi jika fungsi berdasarkan waktu saat ini tidak diperbarui.

Fungsi "acak", seperti RANDBETWEEN, memiliki tujuan menghasilkan nomor acak baru ketika dihitung ulang. Itulah yang seharusnya mereka lakukan. Anda bisa berargumen bahwa perhitungan ulang bisa dilewati karena nilainya tidak boleh dipengaruhi oleh hal-hal lain yang terjadi pada spreadsheet.

Jika itu adalah perilaku default, Anda akan memperbarui spreadsheet, tetapi nilai acak akan tetap konstan. Itu bukan perilaku yang sangat acak. Itu akan mendukung satu kasus penggunaan tetapi tidak yang lain. Kembali ke konsep desain dasar, itu ditangani seperti fungsi lainnya. Perilaku default adalah meminta Excel menghitung ulang. Jika Anda ingin mempertahankan nilai sebelumnya untuk use case Anda, terserah Anda untuk melakukannya dengan alat yang tersedia.


Penjelasan yang bagus ini, sambil membawa saya lebih dekat ke jawaban yang saya cari, masih membuat saya tidak yakin. Saya mencoba menghasilkan 25 angka acak antara 1 dan 365; Saya perlu melakukan ini DUA KALI (ya, ini adalah simulasi masalah ulang tahun "klasik"). Setelah saya menghasilkan satu set 25 angka acak, saya ingin mereka membekukannya (1) sementara saya menghasilkan 25 set lainnya, dan (2) sehingga saya bisa mengurutkan 20 set yang baru saja saya hasilkan. Saya dapat melakukan ini dengan menggunakan solusi yang disarankan oleh orang lain di sini, tetapi ini merupakan tugas yang sulit untuk disampaikan kepada banyak siswa yang belajar statistik dasar.
nowradioguy

3
@nowradioguy, bagian apa yang tidak Anda yakini? Excel bekerja dengan cara tertentu dan kami agak terjebak dengan kemampuan dan desainnya. Untuk kebutuhan Anda, mempertahankan hasilnya cukup sederhana, hanya perlu dilakukan beberapa kali. Jika angkanya ada dalam kolom, pilih dan salin set 25 dalam satu langkah, lalu tempelkan nilai khusus ke dalam sel di tempat lain. Itu hanya beberapa klik, mungkin cara tercepat untuk melakukannya. Rekatkan mungkin akan memicu recalc, jadi Anda siap mengulanginya. Anda dapat melakukan 20 set dalam beberapa menit. Maka bersenang-senanglah dengannya. :-)
fixer1234

2

Setiap perubahan lembar kerja meluncurkan perhitungan ulang otomatis semua rumus, yang merupakan perilaku default.

Anda dapat menonaktifkannya atau membekukan nilai aktual dengan mengubahnya menjadi nilai murni (sebagai kebalikan dari rumus).


1
Saya mengerti itu, tetapi apakah Anda akan tahu MENGAPA? Tidak ada yang jelas tentang mengapa angka acak yang dihasilkan dalam sel tertentu akan dipengaruhi oleh operasi yang dilakukan di tempat lain di lembar kerja itu.
nowradioguy

3
Bagaimana Excel tahu sebelumnya jika Anda ingin nilai acak "seumur hidup" atau jika Anda ingin sering mengubahnya? Kasus kedua adalah yang lebih mungkin (seperti dalam kasus sebaliknya Anda dapat mengetikkan nilai acak langsung ke sel).
MarianD

Pernyataan Anda salah. Perhitungan ulang otomatis TIDAK menyebabkan perhitungan ulang semua formula. Hanya ketika buku kerja memiliki fungsi yang tidak stabil.
teylyn

1

Itu digolongkan sebagai formula "volatil" dan karena itu merupakan bagian dari daftar fungsi yang dihitung ulang ketika perubahan terdeteksi atau fungsi baru dimasukkan.

Pilihan lain untuk dipertimbangkan adalah untuk beralih lembar ke perhitungan manual sehingga Anda mengontrol kapan hal itu terjadi - pastikan Anda ingat untuk menghitung ulang meskipun karena setiap perubahan nilai atau rumus tidak akan menyebabkan perhitungan ulang ...


Saya sudah mencoba Googling "rumus volatil", dan sejumlah tautan menjelaskan wghat ada di daftar rumus "volatil", tetapi tidak ada tempat saya dapat menemukan penjelasan mengapa MENGAPA RANDBETWEEN adalah - atau harus - rumus mudah menguap .
nowradioguy

1
Orang akan berasumsi karena itu "acak" sehingga logis bahwa itu akan menghitung ulang setiap kali ... Seperti yang ditunjukkan jika Anda ingin nomor acak Anda diperbaiki maka Anda memiliki 2 metode yang berbeda - yang berarti bahwa itu tidak akan lagi berubah. Beberapa info bagus di sini: decisionmodels.com/calcsecretsi.htm
Solar Mike

Ya terima kasih; itu adalah salah satu hasil yang muncul dalam pencarian Google saya, tetapi tidak secara langsung menjawab pertanyaan saya. Pikirkan tentang hal ini: jika saya melakukan operasi yang tidak terkait di sel lain, dan perhitungan terjadi, maka setiap angka acak yang dihasilkan sebelumnya dihasilkan baru dan diubah. Tidak masuk akal bagi saya.
nowradioguy

Excel menghitung ulang nilai sel ketika suatu peristiwa memicu proses itu, randbetween digolongkan sebagai volatile (saya membuat lembar dadu untuk anak saya sehingga dihitung ulang setiap kali saya menekan F9 ...) sehingga dihitung ulang, lihat di sini juga: beatexcel.com/ volatile-functions-excel . Jika Anda ingin nomor acak yang sebelumnya berhenti berubah maka ada dua metode untuk mencapai itu.
Solar Mike

@ fixer1234 TIDAK SEMUANYA volatile. Tidak setiap rumus akan dievaluasi kembali ketika ada perubahan pada spreadsheet. Itu hanya terjadi jika buku kerja berisi rumus yang mudah menguap. Jika Anda hanya memiliki Jumlah () atau Countif () atau semacamnya, itu hanya akan menghitung ulang sel yang dipengaruhi oleh perubahan, BUKAN buku kerja kerja.
teylyn

0

Terlepas dari upaya heroik untuk membuat ini terdengar seperti fitur dan bukan bug, saya merasa sangat tidak mungkin bahwa perilaku ini secara rutin menguntungkan. "Fitur" membuat hidup kita lebih mudah, "bug" membuatnya lebih sulit. Dalam kasus saya, memasukkan label atau penjelasan dalam sel yang tidak dirujuk oleh sel lain menyebabkan pengacakan ulang yang tidak nyaman untuk ditangani. Saya akan menyebutnya "bug".

Ya, saya dapat mengontrol perhitungan ulang secara manual (sakit) atau saya bisa menempelkan nilai untuk mencegahnya (sekali lagi, menyakitkan), tetapi dalam kasus apa pengacakan ulang yang disebabkan oleh entri teks di daerah terpencil lembar membuat hidup lebih mudah?

Bahkan jika ada beberapa logika di balik penanganan fungsi "volatil", akan tampak mudah untuk memicu perhitungan kembali melalui kriteria yang tepat selain dari hanya menekan "masuk" setelah entri teks dalam sel yang tidak terkait dan tidak direferensikan, atau dengan pengeditan yang sama sekali tidak terkait. Mencegah itu harus menjadi default dan saya tidak bisa membayangkan akan sulit untuk diterapkan. Jika seseorang menginginkan "fitur" itu maka mereka dapat menyalakannya, tapi saya tidak bisa membayangkan kapan itu akan menjadi hal yang baik. Paling-paling, itu mungkin relatif tidak berbahaya. Bagi saya, ini merepotkan karena jenis lembar yang saya buat.

Akhirnya - Toolpak Analisis memungkinkan Anda untuk membuat distribusi angka acak dalam berbagai cara, dan rentang angka yang dibuat tidak menghitung ulang (mengacak ulang) sama sekali, kecuali jika Anda menyuruhnya melakukannya. Jadi saya menyarankan agar orang menggunakan ToolPak Analisis ketika memenuhi kebutuhan mereka.


Selamat datang di Pengguna Super. Situs ini adalah basis pengetahuan dari solusi, sehingga posting jawaban perlu fokus pada jawaban atas apa yang ditanyakan dalam pertanyaan. Hampir seluruh posting Anda benar-benar kata-kata kasar, opini, dan komentar, yang cenderung menarik downvotes karena tidak produktif dalam kerangka kerja situs. Paragraf terakhir Anda mungkin menjanjikan. Pertimbangkan untuk menghapus yang lainnya, dan perluas paragraf terakhir untuk memasukkan lebih banyak "bagaimana", mungkin sebuah contoh. Untuk pemula Excel, akan sangat membantu untuk menyebutkan cara memuat toolpak itu.
fixer1234
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.