Tại sao số Excel RANDBETweEN thay đổi cho bất kỳ hoạt động nào trên bảng tính?


14

Tôi cần sử dụng hàm RANDBETweEN của Microsoft Excel và nhận thấy rằng một bộ số ngẫu nhiên mới được tạo bất cứ khi nào bạn làm bất cứ điều gì khác ở bất cứ đâu trên bảng tính. Tôi cũng nhận thức được các cách giải quyết để "đóng băng" một tập hợp các số ngẫu nhiên đã được tạo, giả sử, để sắp xếp n danh sách các số ngẫu nhiên giữa a và b. Câu hỏi của tôi là: TẠI SAO các số ngẫu nhiên được tạo ra thay đổi? Có một cái gì đó trong thuật toán cần thiết này? FWIW, Google Sheets, LibreScript Calc, Apple Numbers đều thể hiện cùng một hành vi.


Câu hỏi với "Tại sao ...?" thường lạc đề ở đây vì có lẽ chỉ có tác giả mới có thể đưa ra câu trả lời chắc chắn. Câu hỏi của bạn không chứa chức năng mong muốn, vì vậy thật khó để đề xuất cho bạn bất cứ điều gì.
Máté Juhász

2
@ MátéJuhász Có vẻ như các câu trả lời cho thấy điều đó không khó ...
Solar Mike

Không phải là một câu trả lời, nhưng đây là một vài cách giải quyết cho những người cần một: stackoverflow.com/questions/8011032/ Kẻ
Adam

Câu trả lời:


28

Charles Williams có một lời giải thích tốt về cách Excel tính toán mọi thứ và tại sao.

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

Về bản chất, nếu một sổ làm việc chứa các hàm dễ bay hơi (tham khảo danh sách của Charles, vì chức năng dễ bay hơi đã thay đổi qua nhiều năm với các phiên bản Excel khác nhau), toàn bộ tính toán của sổ làm việc sẽ được kích hoạt khi bất kỳ ô nào trong sổ làm việc bị thay đổi (nếu Excel được đặt thành tính toán tự động). Nếu không có chức năng dễ bay hơi trong sổ làm việc, chỉ có các ô bị ảnh hưởng bởi thay đổi cuối cùng sẽ tính toán lại.

Những người khác ở đây đã tuyên bố rằng tính toán tự động sẽ luôn tính toán mọi thứ trong sổ làm việc khi bất kỳ ô nào bị thay đổi, nhưng điều đó là sai. Chỉ các hàm dễ bay hơi gây ra tính toán lại tự động của tất cả các ô trong sổ làm việc. Không có các hàm dễ bay hơi, Excel chỉ tính toán lại những gì cần tính toán lại.

Đó là lý do tại sao những người như tôi, người biết sự khác biệt, khuyên bạn nên tránh các hàm dễ bay hơi như OFFSET () hoặc INDIRECT () trong các ô bảng tính nếu có thể, vì whey sẽ làm chậm sổ làm việc bằng cách tính toán lại đầy đủ sau mỗi lần thay đổi ô. Học cách sử dụng INDEX () thay vì OFFSET () có thể dẫn đến cải thiện tốc độ đáng kể, vì Index không biến động (xem bài viết của Charles để biết thêm chi tiết).

Công cụ tính toán của Excel dựa trên triết lý "recalc or die" khiến Excel khác biệt với các sản phẩm cạnh tranh khi nó đang được phát triển. Kiểm tra bài viết này: https://www.geekwire.com/2015/recalc-or-die-30-years-later-microsoft-excel-1-0-vets-recount-a-project-that-defied-the -odds /


3
Tất nhiên, nếu "hàm dễ bay hơi" được xác định chính xác, sẽ không có sự khác biệt rõ ràng giữa việc tính toán lại mọi thứ và chỉ tính toán lại những gì cần thiết, ngoài tốc độ.
hobbs

12

Các câu trả lời khác tập trung vào các cơ chế tính toán lại và vai trò của các hàm dễ bay hơi, nhưng tôi nghĩ rằng đã bỏ lỡ một phần của ý chính của câu hỏi. Nó giải quyết các quy tắc đã được sử dụng nhưng không quá nhiều "tại sao". Tôi sẽ tập trung vào đó.

Khái niệm thiết kế

Hãy để tôi bắt đầu với một khái niệm thiết kế và các khối xây dựng của hầu hết các bảng tính hiện đại. Có một "bộ phận trách nhiệm". Các chức năng là các thói quen chuyên dụng thực hiện một nhiệm vụ cụ thể và thực hiện nó mỗi khi chúng được yêu cầu. Khác với điều đó, ứng dụng bảng tính kiểm soát khi họ được hỏi.

Bản thân các hàm không chứa bất kỳ logic nào để chọn tính toán lại hoặc không tính toán lại. Bản chất của tất cả các hàm Excel là thực hiện một số loại hoạt động bất cứ khi nào được kích hoạt để làm như vậy. Không có hàm nào có "bộ nhớ" riêng về giá trị hiện tại hoặc lịch sử tính toán trong quá khứ của nó. Không có cách nào để biết liệu đây có phải là lần đầu tiên nó được yêu cầu thực hiện công việc của mình hay không. Vì vậy, không có chức năng gốc nào có khả năng chỉ chạy một lần. Nếu bất kỳ chức năng nào được tính toán lại, nó sẽ thực hiện những gì nó được thiết kế để làm và tạo ra một giá trị mới.

Ứng dụng bảng tính có chứa một số thông minh cho phép nó tiết kiệm thời gian bằng cách bỏ qua các phép tính toán lại không cần thiết (như được mô tả trong câu trả lời của teylyn). Lần tính toán lại thời gian duy nhất bị bỏ qua là nếu ứng dụng biết rằng giá trị của hàm không bị ảnh hưởng bởi các thay đổi trong bảng tính đã kích hoạt nhu cầu tính toán lại mọi thứ.

Vì vậy, nếu bạn cần phải có một chức năng chạy một lần và sau đó bảo tồn giá trị của nó? Lấy ví dụ của bạn về việc tạo ra một số ngẫu nhiên và sau đó có kết quả không thay đổi. Điều đó mô tả việc tạo các hằng được tạo ngẫu nhiên và bạn có thể làm điều đó với Excel.

Excel không thể biết bạn muốn sử dụng khả năng của nó như thế nào; cho dù bạn muốn tiếp tục tạo ra các giá trị mới hay bảo tồn bộ cuối cùng. Mỗi tùy chọn là một trường hợp sử dụng mà Excel hỗ trợ. Excel chứa cả hai trường hợp bằng cách cung cấp cho bạn các công cụ để tính toán các giá trị mới và các công cụ để bảo tồn các giá trị cũ. Bạn có thể xây dựng bất cứ điều gì bạn muốn. Nhưng người dùng có trách nhiệm làm cho nó làm những gì họ muốn.

Hàm logic

Vì vậy, hãy nhìn vào logic cho những gì chức năng làm. Có thể có ý nghĩa cho logic tính toán lại bỏ qua một hàm ngẫu nhiên vì giá trị của nó không bị ảnh hưởng bởi các thay đổi khác trong bảng tính?

Giá trị của hàm có thay đổi khi tính toán lại hay không tùy thuộc vào mục đích của nó và dựa trên mục đích của nó. Một tính toán trên các giá trị không đổi sẽ luôn tạo ra kết quả tương tự. Một hoạt động dựa trên các giá trị ô không thay đổi sẽ tạo ra kết quả tương tự.

Tuy nhiên, một số chức năng được thiết kế với mục đích và mục đích tạo ra một kết quả khác nhau mỗi lần. Xem xét, ví dụ, các chức năng dựa trên thời gian hiện tại. Họ sẽ tạo ra một kết quả mới dựa trên thời gian tính toán lại. Bạn không thể có một chức năng mà mục đích của nó là tạo ra một giá trị dựa trên thời gian hiện tại và nó không được cập nhật khi tính toán lại.

Mục tiêu kiểm soát tính toán lại là luôn làm cho mọi thứ phản ánh trạng thái hiện tại của sự vật khi tính toán lại được kích hoạt. Tiêu chí đó sẽ không được đáp ứng nếu các chức năng dựa trên thời gian hiện tại không được cập nhật.

Các hàm "ngẫu nhiên", như RANDBETweEN, có mục đích tạo ra một số ngẫu nhiên mới khi tính toán lại. Đó là những gì họ dự định làm. Bạn có thể lập luận rằng tính toán lại có thể bị bỏ qua vì giá trị không bị ảnh hưởng bởi những thứ khác xảy ra trên bảng tính.

Nếu đó là hành vi mặc định, bạn sẽ cập nhật bảng tính, nhưng giá trị ngẫu nhiên sẽ không đổi. Đó không phải là hành vi rất ngẫu nhiên. Điều đó sẽ hỗ trợ một trường hợp sử dụng nhưng không phải là trường hợp khác. Quay trở lại khái niệm thiết kế cơ bản, nó được xử lý như mọi chức năng khác. Hành vi mặc định là để Excel tính toán lại nó. Nếu bạn muốn duy trì giá trị trước đó cho trường hợp sử dụng của mình, bạn phải làm điều đó với các công cụ có sẵn.


Lời giải thích tốt đẹp này, trong khi đưa tôi đến gần hơn với câu trả lời tôi tìm kiếm, vẫn khiến tôi không tin tưởng. Tôi đang cố gắng tạo 25 số ngẫu nhiên trong khoảng từ 1 đến 365; Tôi cần phải thực hiện điều này HAI LẦN (vâng, đó là một mô phỏng của vấn đề sinh nhật "cổ điển"). Khi tôi tạo một bộ gồm 25 số ngẫu nhiên, tôi muốn chúng đóng băng nó (1) trong khi tôi tạo các bộ khác gồm 25 và (2) để tôi có thể sắp xếp 20 bộ tôi vừa tạo. Tôi có thể làm điều này bằng cách sử dụng các cách giải quyết được đề xuất bởi những người khác trong tài liệu này, nhưng đây là một việc khá khó khăn để vượt qua nhiều sinh viên học thống kê tiểu học.
nowradioguy

3
@nowradioguy, phần nào bạn không tin tưởng? Excel hoạt động theo một cách nhất định và chúng tôi bị mắc kẹt với khả năng và thiết kế của nó. Đối với yêu cầu của bạn, bảo toàn kết quả là khá đơn giản, nó chỉ cần được thực hiện một loạt các lần. Nếu các số nằm trong một cột, hãy chọn và sao chép bộ 25 trong một bước duy nhất, sau đó dán các giá trị đặc biệt vào một ô ở một vị trí khác. Đó chỉ là một vài cú nhấp chuột, có lẽ là cách nhanh nhất để làm điều đó. Dán có thể sẽ kích hoạt một recalc, vì vậy bạn đã sẵn sàng để lặp lại. Bạn có thể làm 20 bộ trong vài phút. Sau đó hãy vui vẻ với nó. :-)
fixer1234

2

Mỗi thay đổi trong bảng tính sẽ khởi chạy tính toán lại tự động tất cả các công thức, đó là hành vi mặc định.

Bạn có thể vô hiệu hóa nó hoặc đóng băng giá trị thực bằng cách chuyển đổi nó thành giá trị thuần túy (ngược lại với công thức).


1
Tôi hiểu điều đó, nhưng bạn sẽ biết TẠI SAO? Không có gì rõ ràng về lý do tại sao một số ngẫu nhiên được tạo trong một ô cụ thể sẽ bị ảnh hưởng bởi một thao tác được thực hiện ở nơi khác trên bảng tính đó.
nowradioguy

3
Làm thế nào Excel biết trước nếu bạn muốn một giá trị ngẫu nhiên "trọn đời" hoặc nếu bạn muốn thay đổi nó thường xuyên? Trường hợp thứ hai là trường hợp có thể nhiều hơn (như trong trường hợp ngược lại, bạn có thể nhập giá trị ngẫu nhiên trực tiếp vào ô).
MarianD

Tuyên bố của bạn là sai. Tự động tính toán lại KHÔNG gây ra tính toán lại tất cả các công thức. Chỉ khi bảng tính có chức năng dễ bay hơi.
teylyn

1

Nó được phân loại là một công thức "dễ bay hơi" và như vậy là một phần của danh sách các hàm được tính toán lại khi phát hiện ra một thay đổi hoặc một chức năng mới.

Một tùy chọn khác cần xem xét là chuyển trang tính sang tính toán thủ công để bạn kiểm soát khi điều đó xảy ra - chỉ cần đảm bảo bạn nhớ tính toán lại vì mọi thay đổi đối với các giá trị hoặc công thức sẽ không gây ra tính toán lại ...


Tôi đã thử dùng "công thức dễ bay hơi" của Google và một số liên kết đưa ra giải thích wghat nằm trong danh sách các công thức "dễ bay hơi", nhưng tôi không thể tìm thấy lời giải thích nào về lý do TẠI SAO RANDBETweEN - hoặc phải là - một công thức dễ bay hơi .
nowradioguy

1
Người ta sẽ cho rằng vì nó là "ngẫu nhiên" nên hợp lý là nó sẽ tính toán lại mỗi lần ... Như đã chỉ ra nếu bạn muốn số ngẫu nhiên của mình cố định thì bạn có 2 phương thức khác nhau - điều đó có nghĩa là nó sẽ không còn thay đổi. Một số thông tin tốt ở đây: resultmodels.com/calcsecretsi.htm
Solar Mike

Vâng, cảm ơn; đó là một trong những kết quả xuất hiện trong tìm kiếm Google của tôi, nhưng nó không trực tiếp giải quyết câu hỏi của tôi. Hãy suy nghĩ về điều này: nếu tôi đang thực hiện một thao tác không liên quan trong một ô khác và một phép tính xảy ra, thì bất kỳ số ngẫu nhiên nào được tạo trước đó sẽ được tạo lại và được thay đổi. Làm cho ít ý nghĩa với tôi.
nowradioguy

Excel tính toán lại các giá trị ô khi một sự kiện kích hoạt quá trình đó, randb between được phân loại là dễ bay hơi (Tôi đã làm một tấm súc sắc cho con gái tôi để nó tính toán lại mỗi khi tôi nhấn F9 ...) để nó được tính toán lại, xem tại đây: beatexcel.com/ dễ bay hơi-chức năng-excel . Nếu bạn muốn một số ngẫu nhiên trước đó ngừng thay đổi thì có hai phương pháp để đạt được điều đó.
Năng lượng mặt trời Mike

@ fixer1234 KHÔNG MỌI THỨ là dễ bay hơi. Không phải mọi công thức đều được đánh giá lại khi có bất cứ điều gì thay đổi trên bảng tính. Điều đó chỉ xảy ra nếu bảng tính chứa các công thức dễ bay hơi. Nếu bạn chỉ có Sum () hoặc Countif () hoặc một số thứ như vậy, nó sẽ chỉ tính toán lại các ô bị ảnh hưởng bởi một thay đổi, KHÔNG phải là sổ làm việc wole.
teylyn

0

Bất chấp những nỗ lực anh hùng để làm cho âm thanh này giống như một tính năng và không phải là một lỗi, tôi thấy rất khó có khả năng hành vi này là lợi thế thường xuyên. "Các tính năng" làm cho cuộc sống của chúng ta dễ dàng hơn, "lỗi" làm cho nó khó khăn hơn. Trong trường hợp của tôi, việc nhập nhãn hoặc giải thích trong một ô không được tham chiếu bởi bất kỳ ô nào khác gây ra sự ngẫu nhiên lại gây bất tiện khi xử lý. Tôi sẽ gọi đó là một "lỗi".

Có, tôi có thể kiểm soát tính toán lại một cách thủ công (một cơn đau) hoặc tôi có thể dán các giá trị để ngăn chặn nó (một lần nữa, một cơn đau), nhưng trong trường hợp nào việc tái ngẫu nhiên gây ra bởi việc nhập văn bản vào vùng xa của trang tính giúp cuộc sống dễ dàng hơn?

Ngay cả khi có một số logic đằng sau việc xử lý các chức năng "dễ bay hơi", có vẻ dễ dàng kích hoạt tính toán lại thông qua các tiêu chí thích hợp ngoài việc nhấn "enter" sau khi nhập văn bản vào các ô không liên quan và không liên quan hoặc bởi các chỉnh sửa hoàn toàn không liên quan. Ngăn chặn điều đó nên là mặc định và tôi không thể tưởng tượng được nó sẽ khó thực hiện. Nếu ai đó muốn "tính năng" đó thì họ có thể bật nó lên, nhưng tôi không thể tưởng tượng khi đó sẽ là một điều tốt. Tốt nhất, nó có thể tương đối vô hại. Đối với tôi, đó là một rắc rối lớn vì loại trang tính tôi đang tạo.

Cuối cùng - Công cụ phân tích cho phép bạn tạo phân phối các số ngẫu nhiên theo nhiều cách khác nhau và các phạm vi số được tạo ra không tính toán lại (ngẫu nhiên hóa lại), trừ khi bạn bảo nó làm như vậy. Vì vậy, tôi khuyên mọi người nên sử dụng ToolPak phân tích khi nó đáp ứng nhu cầu của họ.


Chào mừng đến với Siêu người dùng. Trang web là một cơ sở kiến ​​thức của các giải pháp, vì vậy bài trả lời cần tập trung vào câu trả lời cho những gì được hỏi trong câu hỏi. Hầu như toàn bộ bài viết của bạn thực sự là một lời tán dương, ý kiến ​​và bình luận, có khả năng thu hút những người phản đối vì nó không mang lại hiệu quả trong khuôn khổ của trang web. Đoạn cuối của bạn có thể đầy hứa hẹn. Xem xét loại bỏ mọi thứ khác và mở rộng đoạn cuối để bao gồm nhiều hơn "cách", có thể là một ví dụ. Đối với người mới sử dụng Excel, sẽ rất hữu ích khi đề cập đến cách tải toolpak đó.
fixer1234
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.