ทำไมตัวเลขของ Excel RANDBETWEEN จึงเปลี่ยนไปสำหรับการทำงานใด ๆ ในแผ่นงาน


14

ฉันจำเป็นต้องใช้ฟังก์ชั่น RANDBETWEEN ของ Microsoft Excel และทราบว่ามีการสร้างตัวเลขสุ่มชุดใหม่ทุกครั้งที่คุณทำสิ่งใดก็ตามบนแผ่นงาน ฉันยังทราบถึงวิธีการแก้ปัญหาเพื่อ "หยุด" ชุดของตัวเลขสุ่มที่สร้างขึ้นพูดเพื่อเรียงลำดับรายการ n ของตัวเลขสุ่มระหว่าง a และ b คำถามของฉันคือ: ทำไมตัวเลขสุ่มสร้างการเปลี่ยนแปลง? มีบางอย่างในอัลกอริทึมที่จำเป็นสำหรับสิ่งนี้หรือไม่? FWIW, Google ชีต, LibreOffice Calc, Apple Numbers ล้วนมีพฤติกรรมแบบเดียวกัน


คำถามเกี่ยวกับ "ทำไม ... " มักจะปิดหัวข้อที่นี่เนื่องจากอาจมีเพียงผู้เขียนเท่านั้นที่สามารถให้คำตอบที่ชัดเจน คำถามของคุณไม่มีฟังก์ชั่นที่ต้องการดังนั้นจึงเป็นการยากที่จะแนะนำอะไรให้คุณ
MátéJuhász

2
@ MátéJuhászดูเหมือนว่าคำตอบที่ได้รับแสดงให้เห็นว่ามันไม่ได้เป็นเรื่องยาก ...
พลังงานแสงอาทิตย์ไมค์

ไม่ใช่คำตอบ แต่นี่เป็นวิธีแก้ปัญหาสองสามอย่างสำหรับผู้ที่ต้องการ: stackoverflow.com/questions/8011032/…
อดัม

คำตอบ:


28

Charles Williams มีคำอธิบายที่ดีว่า Excel คำนวณสิ่งต่าง ๆ อย่างไรและทำไม

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

ในสาระสำคัญถ้าเวิร์กบุ๊กมีฟังก์ชั่นที่เปลี่ยนแปลงได้ (อ้างถึงรายการของชาร์ลส์เนื่องจากฟังก์ชั่นที่เปลี่ยนแปลงได้ในช่วงหลายปีที่มี Excel เวอร์ชันต่างกัน) การคำนวณใหม่ในเวิร์กบุ๊กทั้งหมดจะถูกทริกเกอร์เมื่อเซลล์ใด ๆ ถูกตั้งค่าเป็นการคำนวณอัตโนมัติ) หากไม่มีฟังก์ชั่นระเหยในสมุดงานเฉพาะเซลล์ที่ได้รับผลกระทบจากการเปลี่ยนแปลงครั้งล่าสุดจะคำนวณใหม่

คนอื่น ๆ ที่นี่ระบุว่าการคำนวณอัตโนมัติจะคำนวณทุกอย่างในสมุดงานเมื่อมีการเปลี่ยนแปลงเซลล์ใด ๆ แต่ก็ผิด เฉพาะฟังก์ชันที่ระเหยได้ทำให้การคำนวณใหม่ของเซลล์ทั้งหมดในสมุดงานโดยอัตโนมัติ หากไม่มีฟังก์ชั่นที่เปลี่ยนแปลงได้ Excel จะคำนวณใหม่เฉพาะสิ่งที่จำเป็นต้องคำนวณใหม่

นั่นคือเหตุผลที่คนอย่างฉันที่รู้ถึงความแตกต่างขอแนะนำอย่างยิ่งให้หลีกเลี่ยงฟังก์ชั่นที่มีความผันผวนเช่น OFFSET () หรือ INDIRECT () ในเซลล์แผ่นงานหากเป็นไปได้เนื่องจากเวย์จะทำให้สมุดงานช้าลง การเรียนรู้ที่จะใช้ INDEX () แทน OFFSET () อาจส่งผลให้มีการปรับปรุงความเร็วอย่างมากเนื่องจากดัชนีไม่ผันผวน (ดูรายละเอียดเพิ่มเติมที่บทความของ Charles

เอ็นจิ้นการคำนวณของ Excel ตั้งอยู่บนปรัชญา "recalc or die" ซึ่งทำให้ Excel แตกต่างจากผลิตภัณฑ์คู่แข่งเมื่ออยู่ในการพัฒนา ลองดูบทความนี้: https://www.geekwire.com/2015/recalc-or-die-30-years-later-microsoft-excel-1-0-vets-recount-a-project-that-defied-the -odds /


3
แน่นอนว่าถ้า "ฟังก์ชั่นระเหย" ถูกกำหนดไว้อย่างถูกต้องไม่ควรมองเห็นความแตกต่างระหว่างการคำนวณทุกอย่างใหม่และคำนวณเฉพาะสิ่งที่ต้องการนอกเหนือจากความเร็ว
ฮอบส์

12

คำตอบอื่น ๆ ให้ความสำคัญกับกลไกของการคำนวณใหม่และบทบาทของฟังก์ชั่นการระเหย แต่ฉันคิดว่านั่นเป็นส่วนหนึ่งของคำถาม มันอยู่ที่กฎที่ได้รับการว่าจ้าง แต่ไม่มาก "ทำไม" ฉันจะมุ่งเน้นที่

แนวคิดการออกแบบ

ให้ฉันเริ่มต้นด้วยแนวคิดการออกแบบและหน่วยการสร้างของสเปรดชีตที่ทันสมัยที่สุด มี "การแบ่งความรับผิดชอบ" ฟังก์ชั่นเป็นงานประจำที่ทำหน้าที่เฉพาะและทำทุกครั้งที่ถาม นอกเหนือจากนั้นแอปพลิเคชันสเปรดชีตจะควบคุมเมื่อมีการถาม

ฟังก์ชั่นตัวเองไม่มีตรรกะใด ๆ เพื่อเลือกที่จะคำนวณใหม่หรือไม่คำนวณใหม่ ลักษณะของฟังก์ชั่น Excel ทั้งหมดคือการดำเนินการบางประเภทเมื่อใดก็ตามที่ถูกเรียกให้ทำเช่นนั้น ไม่มีฟังก์ชั่นที่มี "หน่วยความจำ" ของตัวเองของมูลค่าปัจจุบันของมันหรือประวัติศาสตร์ของการคำนวณที่ผ่านมา ไม่มีทางที่จะรู้ได้ว่านี่เป็นครั้งแรกที่ถูกขอให้ทำงานหรือไม่ ดังนั้นไม่มีฟังก์ชั่นดั้งเดิมที่มีความสามารถในการทำงานเพียงครั้งเดียว หากฟังก์ชั่นใด ๆ ถูกคำนวณใหม่มันจะทำสิ่งที่ออกแบบมาเพื่อทำและสร้างมูลค่าใหม่

แอปพลิเคชันสเปรดชีตมีข้อมูลบางอย่างที่ช่วยให้ประหยัดเวลาโดยข้ามการคำนวณซ้ำที่ไม่จำเป็น (ดังอธิบายในคำตอบของ teylyn) การคำนวณซ้ำครั้งเดียวเท่านั้นคือหากแอปพลิเคชันทราบว่าค่าของฟังก์ชันไม่ได้รับผลกระทบจากการเปลี่ยนแปลงสเปรดชีตที่ทำให้เกิดความต้องการในการคำนวณใหม่

แล้วถ้าคุณต้องการให้ฟังก์ชั่นทำงานหนึ่งครั้งแล้วเก็บค่ามันไว้ ยกตัวอย่างของคุณในการสร้างตัวเลขสุ่มแล้วมีผลไม่เปลี่ยนแปลง ซึ่งอธิบายการสร้างค่าคงที่ที่สร้างแบบสุ่มและคุณสามารถทำได้ด้วย Excel

Excel ไม่รู้ว่าคุณต้องการใช้ความสามารถของมันอย่างไร ไม่ว่าคุณต้องการที่จะผลิตค่าใหม่หรือรักษาชุดสุดท้าย แต่ละตัวเลือกเป็นกรณีการใช้งานที่ Excel รองรับ Excel รองรับทั้งสองกรณีโดยให้เครื่องมือในการคำนวณค่าใหม่และเครื่องมือในการรักษาค่าเก่า คุณสามารถสร้างสิ่งที่คุณต้องการ แต่ผู้ใช้มีหน้าที่รับผิดชอบในการทำให้สิ่งที่พวกเขาต้องการ

ฟังก์ชันลอจิก

ดังนั้นให้ดูที่ตรรกะสำหรับสิ่งที่ฟังก์ชั่นทำ มันอาจจะเหมาะสมสำหรับตรรกะการคำนวณใหม่เพื่อข้ามฟังก์ชั่นการสุ่มเพราะค่าของมันไม่ควรได้รับผลกระทบจากการเปลี่ยนแปลงอื่น ๆ ในสเปรดชีต?

การที่ค่าของฟังก์ชันจะเปลี่ยนไปตามการคำนวณใหม่หรือไม่นั้นขึ้นอยู่กับวัตถุประสงค์ของฟังก์ชันนั้น ๆ การคำนวณค่าคงที่จะให้ผลลัพธ์ที่เหมือนกันเสมอ การดำเนินการตามค่าเซลล์ที่ไม่เปลี่ยนแปลงจะให้ผลลัพธ์เดียวกัน

อย่างไรก็ตามฟังก์ชั่นบางอย่างได้รับการออกแบบด้วยความตั้งใจและวัตถุประสงค์ในการสร้างผลลัพธ์ที่แตกต่างกันทุกครั้ง ตัวอย่างเช่นลองพิจารณาฟังก์ชั่นตามเวลาปัจจุบัน พวกเขาจะสร้างผลลัพธ์ใหม่ตามเวลาในการคำนวณใหม่ คุณไม่สามารถใช้ฟังก์ชันที่มีวัตถุประสงค์เพื่อสร้างมูลค่าตามเวลาปัจจุบันและไม่มีการปรับปรุงเมื่อคำนวณใหม่

วัตถุประสงค์การควบคุมการคำนวณใหม่คือการทำให้ทุกอย่างสะท้อนสถานะปัจจุบันของสิ่งต่าง ๆ เสมอเมื่อมีการเรียกใช้การคำนวณใหม่ เกณฑ์ดังกล่าวจะไม่ถูกต้องหากฟังก์ชั่นตามเวลาปัจจุบันไม่ได้รับการอัพเดต

ฟังก์ชั่น "สุ่ม" เช่น RANDBETWEEN มีจุดประสงค์ในการสร้างหมายเลขสุ่มใหม่เมื่อคำนวณใหม่ นั่นคือสิ่งที่พวกเขาตั้งใจจะทำ คุณสามารถยืนยันว่าการคำนวณซ้ำอาจข้ามได้เนื่องจากค่าไม่ควรได้รับผลกระทบจากสิ่งอื่น ๆ ที่เกิดขึ้นในสเปรดชีต

หากนั่นเป็นพฤติกรรมเริ่มต้นคุณจะอัปเดตสเปรดชีต แต่ค่าสุ่มจะคงที่ นั่นไม่ใช่พฤติกรรมที่สุ่มมาก ที่จะรองรับกรณีการใช้งานอย่างใดอย่างหนึ่ง แต่ไม่ได้อื่น ๆ กลับไปสู่แนวคิดการออกแบบขั้นพื้นฐานมันถูกจัดการเหมือนกับฟังก์ชั่นอื่น พฤติกรรมเริ่มต้นคือการให้ Excel คำนวณใหม่ หากคุณต้องการรักษาค่าก่อนหน้านี้สำหรับกรณีการใช้งานของคุณขึ้นอยู่กับคุณที่จะทำเช่นนั้นด้วยเครื่องมือที่มีอยู่


คำอธิบายที่ดีในขณะที่พาฉันเข้าใกล้คำตอบที่ฉันค้นหายังคงทำให้ฉันไม่มั่นใจ ฉันพยายามสร้างตัวเลขสุ่ม 25 หมายเลขระหว่าง 1 ถึง 365 ฉันต้องทำยี่สิบครั้งนี้ (ใช่มันเป็นการจำลองปัญหาวันเกิด "คลาสสิค") เมื่อฉันสร้างชุดของตัวเลขสุ่ม 25 ตัวฉันต้องการให้พวกเขาตรึง (1) ในขณะที่ฉันสร้างอีกชุดที่ 25 และ (2) ดังนั้นฉันจึงสามารถเรียงลำดับ 20 ชุดที่ฉันเพิ่งสร้างขึ้นได้ ฉันสามารถทำได้โดยใช้วิธีการแก้ปัญหาที่ผู้อื่นแนะนำไว้ในที่นี้ แต่นี่เป็นงานที่ค่อนข้างน่าเบื่อที่จะข้ามไปยังนักเรียนหลายคนที่เรียนสถิติเบื้องต้น
nowradioguy

3
@nowradioguy ส่วนที่คุณไม่มั่นใจเกี่ยวกับอะไร Excel ทำงานในลักษณะที่แน่นอนและเราก็ติดอยู่กับความสามารถและการออกแบบ สำหรับความต้องการของคุณการเก็บรักษาผลลัพธ์นั้นค่อนข้างง่ายมันแค่ต้องทำหลายครั้ง หากตัวเลขอยู่ในคอลัมน์ให้เลือกและคัดลอกชุด 25 ในขั้นตอนเดียวแล้ววางค่าพิเศษลงในเซลล์ในจุดอื่น นั่นเป็นเพียงไม่กี่คลิกอาจเป็นวิธีที่เร็วที่สุดที่จะทำ การวางอาจทำให้เกิดการคำนวณซ้ำดังนั้นคุณพร้อมที่จะทำซ้ำ คุณสามารถทำ 20 ชุดในไม่กี่นาที จากนั้นขอให้สนุกกับมัน :-)
fixer1234

2

การเปลี่ยนแปลงในเวิร์กชีททุกครั้งจะมีการคำนวณใหม่โดยอัตโนมัติของสูตรทั้งหมดซึ่งเป็นพฤติกรรมเริ่มต้น

คุณสามารถปิดการใช้งานหรือตรึงค่าจริงโดยการแปลงเป็นค่าจริง (ตรงข้ามของสูตร)


1
ฉันเข้าใจว่า แต่คุณจะรู้ว่าทำไม ไม่มีอะไรชัดเจนเกี่ยวกับสาเหตุที่ตัวเลขสุ่มที่สร้างขึ้นในเซลล์หนึ่ง ๆ จะได้รับผลกระทบจากการดำเนินการที่อื่นในแผ่นงานนั้น
nowradioguy

3
Excel จะทราบล่วงหน้าได้อย่างไรถ้าคุณต้องการค่าแบบสุ่ม "เพื่อชีวิต" หรือถ้าคุณต้องการเปลี่ยนบ่อยๆ กรณีที่สองอาจเป็นกรณีที่มีความเป็นไปได้มากกว่า (ในกรณีตรงข้ามคุณอาจพิมพ์ค่าสุ่มลงในเซลล์โดยตรง)
MarianD

คำสั่งของคุณผิด การคำนวณใหม่อัตโนมัติไม่ทำให้เกิดการคำนวณใหม่ของสูตรทั้งหมด เฉพาะเมื่อสมุดงานมีฟังก์ชั่นที่เปลี่ยนแปลงได้
teylyn

1

มันถูกจัดประเภทเป็นสูตร "ระเหย" และเป็นส่วนหนึ่งของรายการฟังก์ชันที่คำนวณใหม่เมื่อตรวจพบการเปลี่ยนแปลงหรือป้อนฟังก์ชันใหม่

ตัวเลือกอื่นที่ควรพิจารณาคือการสลับแผ่นงานเป็นการคำนวณด้วยตนเองเพื่อให้คุณสามารถควบคุมได้เมื่อมันเกิดขึ้น - เพียงให้แน่ใจว่าคุณจำคำนวณอีกครั้งเนื่องจากการเปลี่ยนแปลงค่าหรือสูตรใด ๆ จะไม่ทำให้เกิดการคำนวณใหม่ ...


ฉันได้ลอง Googling "volatile formula" แล้วและมีลิงก์จำนวนหนึ่งที่อธิบายว่า wghat อยู่ในรายการของสูตร "volatile" แต่ไม่มีที่ไหนที่ฉันจะหาคำอธิบายได้ว่าทำไม RANDBETWEEN ถึงเป็นหรือต้องเป็น - สูตรระเหย .
nowradioguy

1
หนึ่งจะถือว่าเป็น "สุ่ม" ดังนั้นจึงเป็นเหตุผลว่ามันจะคำนวณทุกครั้ง ... ตามที่ชี้ให้เห็นว่าถ้าคุณต้องการหมายเลขสุ่มของคุณคงที่แล้วคุณมี 2 วิธีที่แตกต่างกัน - ซึ่งหมายความว่ามันจะไม่เปลี่ยนแปลงอีกต่อไป ข้อมูลที่ดีบางอย่างที่นี่: decisionmodels.com/calcsecretsi.htm
Solar Mike

ใช่ขอบคุณ; นั่นเป็นหนึ่งในผลลัพธ์ที่เกิดขึ้นในการค้นหาของ Google แต่ไม่ได้ตอบคำถามของฉันโดยตรง คิดเกี่ยวกับมัน: ถ้าฉันกำลังดำเนินการที่ไม่เกี่ยวข้องในเซลล์อื่นและการคำนวณตามมาตัวเลขสุ่มใด ๆ ที่สร้างขึ้นก่อนหน้านี้จะถูกสร้างขึ้นใหม่และมีการเปลี่ยนแปลง ทำให้รู้สึกน้อยสำหรับฉัน
nowradioguy

Excel คำนวณค่าของเซลล์ใหม่เมื่อมีเหตุการณ์เกิดขึ้นกระบวนการนั้น randbetween ถูกจัดประเภทเป็นสารระเหย (ฉันทำแผ่นลูกเต๋าสำหรับลูกสาวของฉันเพื่อให้คำนวณใหม่ทุกครั้งที่ฉันกด F9 ... ) เพื่อให้คำนวณใหม่ดูที่นี่ด้วย: beatexcel.com/ ฟังก์ชั่นความผันผวน-Excel หากคุณต้องการให้หมายเลขสุ่มก่อนหน้าหยุดหยุดการเปลี่ยนแปลงมีวิธีการสองวิธีเพื่อให้บรรลุ
Solar Mike

@ fixer1234 ไม่ใช่ทุกอย่างที่ระเหยได้ ไม่ใช่ทุกสูตรที่ได้รับการประเมินอีกครั้งเมื่อมีอะไรเปลี่ยนแปลงในสเปรดชีต สิ่งนี้จะเกิดขึ้นถ้าเวิร์กบุ๊กนั้นมีสูตรระเหย หากคุณมีเฉพาะ Sum () หรือ Countif () หรือบางอย่างมันจะคำนวณเฉพาะเซลล์ที่ได้รับผลกระทบจากการเปลี่ยนแปลงไม่ใช่สมุดงาน wole
teylyn

0

แม้จะมีความพยายามอย่างกล้าหาญในการทำให้เสียงนี้เป็นคุณสมบัติ แต่ไม่ใช่ข้อผิดพลาด แต่ฉันคิดว่ามันไม่น่าเป็นไปได้อย่างมากที่พฤติกรรมนี้จะได้เปรียบเป็นประจำ "คุณสมบัติ" ทำให้ชีวิตของเราง่ายขึ้น "ข้อบกพร่อง" ทำให้มันยากขึ้น ในกรณีของฉันการป้อนป้ายกำกับหรือคำอธิบายในเซลล์ที่ไม่ได้อ้างอิงโดยเซลล์อื่นใดทำให้เกิดการสุ่มอีกครั้งซึ่งไม่สะดวกในการจัดการ ฉันจะเรียกมันว่า "บั๊ก"

ใช่ฉันสามารถควบคุมการคำนวณใหม่ด้วยตนเอง (ความเจ็บปวด) หรือฉันสามารถวางค่าเพื่อป้องกัน (อีกครั้งเป็นความเจ็บปวด) แต่ในกรณีใดการสุ่มอีกครั้งที่เกิดจากการป้อนข้อความในพื้นที่ห่างไกลของแผ่นทำให้ชีวิตง่ายขึ้น?

แม้ว่าจะมีเหตุผลบางอย่างที่อยู่เบื้องหลังการจัดการฟังก์ชั่น "ระเหย" มันก็ดูเหมือนจะเป็นเรื่องง่ายที่จะกระตุ้นการคำนวณใหม่ผ่านเกณฑ์ที่เหมาะสมนอกเหนือจากการกดปุ่ม "ป้อน" หลังจากป้อนข้อความในเซลล์ที่ไม่เกี่ยวข้องและไม่ได้รับการยืนยัน การป้องกันที่ควรเป็นค่าเริ่มต้นและฉันไม่สามารถจินตนาการได้ว่ามันจะยากที่จะใช้ หากมีคนต้องการคุณลักษณะ "" จากนั้นพวกเขาสามารถเปิดใช้งาน แต่ฉันไม่สามารถจินตนาการได้ว่าเมื่อใดจะเป็นสิ่งที่ดี ที่ดีที่สุดมันอาจไม่เป็นอันตราย สำหรับฉันมันเป็นเรื่องยุ่งยากมากเนื่องจากแผ่นงานที่ฉันสร้าง

ในที่สุด - Toolpak การวิเคราะห์ช่วยให้คุณสามารถสร้างการแจกแจงของตัวเลขสุ่มได้หลายวิธีและช่วงของตัวเลขที่สร้างขึ้นจึงไม่คำนวณใหม่ (สุ่มอีกครั้ง) เว้นแต่คุณจะบอกให้ทำเช่นนั้น ดังนั้นฉันแนะนำให้คนใช้ Analysis ToolPak เมื่อมันตรงกับความต้องการของพวกเขา


ยินดีต้อนรับสู่ Super User ไซต์เป็นฐานความรู้ของการแก้ปัญหาดังนั้นการตอบกระทู้ต้องเน้นคำตอบสำหรับสิ่งที่ถูกถามในคำถาม โพสต์เกือบทั้งหมดของคุณเป็นคำพูดหยาบคายความเห็นและคำวิจารณ์ซึ่งน่าจะดึงดูด downvotes ได้จริงเพราะมันไม่ได้ผลในกรอบของเว็บไซต์ ย่อหน้าสุดท้ายของคุณอาจมีแนวโน้ม ลองลบทุกอย่างออกและขยายย่อหน้าสุดท้ายเพื่อรวม "วิธี" เพิ่มเติมอาจเป็นตัวอย่าง สำหรับมือใหม่ใน Excel มันจะมีประโยชน์ถ้าพูดถึงวิธีการโหลดเครื่องมือนี้
fixer1234
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.