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.
microsoft-excel
nowradioguy
sumber
sumber
Jawaban:
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 /
sumber
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.
sumber
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).
sumber
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 ...
sumber
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.
sumber