
Công thức chung
=INDEX(names,RANDARRAY(n,1,1,COUNTA(names),TRUE))
Tóm lược
Để tạo danh sách tên ngẫu nhiên, bạn có thể sử dụng hàm INDEX và hàm RANDARRAY để chọn các tên ngẫu nhiên từ danh sách hiện có. Trong ví dụ được hiển thị, công thức trong D5 là:
=INDEX(names,RANDARRAY(10,1,1,COUNTA(names),TRUE))
trả về 10 giá trị ngẫu nhiên từ phạm vi được đặt tên "tên" (B5: B104).
Giải trình
Về cơ bản, công thức này sử dụng hàm INDEX để lấy 10 tên ngẫu nhiên từ một phạm vi được đặt tên được gọi là "tên" chứa 100 tên. Ví dụ: để lấy tên thứ năm từ danh sách, chúng tôi sử dụng INDEX như sau:
=INDEX(names,5)
Tuy nhiên, mẹo trong trường hợp này là chúng ta không muốn có một tên duy nhất tại một vị trí đã biết, chúng ta muốn 10 tên ngẫu nhiên tại các vị trí không xác định trong khoảng từ 1 đến 100. Đây là một trường hợp sử dụng tuyệt vời cho hàm RANDARRAY, hàm này có thể tạo ra một tập hợp ngẫu nhiên các số nguyên trong một phạm vi nhất định. Làm việc từ trong ra ngoài, chúng tôi sử dụng RANDARRAY để lấy 10 số ngẫu nhiên từ 1 đến 100 như sau:
RANDARRAY(10,1,1,COUNTA(names)
Hàm COUNTA được sử dụng để lấy số lượng tên động trong danh sách, nhưng chúng tôi có thể thay thế COUNTA bằng mã cứng 100 trong trường hợp này với cùng kết quả:
=INDEX(names,RANDARRAY(10,1,1,100,TRUE))
Trong cả hai trường hợp, RANDARRAY sẽ trả về 10 số trong một mảng trông giống như sau:
(64;74;13;74;96;65;5;73;84;85)
Lưu ý: những con số này chỉ là ngẫu nhiên và không ánh xạ trực tiếp đến ví dụ được hiển thị.
Mảng này được trả về trực tiếp cho hàm INDEX dưới dạng đối số hàng:
=INDEX(names, (64;74;13;74;96;65;5;73;84;85)
Bởi vì chúng tôi đang cung cấp INDEX 10 số hàng, nó sẽ có 10 kết quả, mỗi kết quả tương ứng với một tên ở vị trí đã cho. 10 tên ngẫu nhiên được trả về trong một dải ô bắt đầu từ ô D5.
Lưu ý: RANDARRAY là một hàm dễ bay hơi và sẽ tính toán lại mỗi khi trang tính được thay đổi, khiến các giá trị bị sử dụng. Để ngăn các giá trị tự động sắp xếp, bạn có thể sao chép công thức, sau đó sử dụng Dán đặc biệt> Giá trị để chuyển đổi công thức thành giá trị tĩnh.
Ngăn chặn các bản sao
Một vấn đề với công thức trên (tùy thuộc vào nhu cầu của bạn) là RANDARRAY đôi khi sẽ tạo ra các số trùng lặp. Nói cách khác, không có gì đảm bảo rằng RANDARRAY sẽ trả về 10 số duy nhất.
Để đảm bảo có 10 tên khác nhau từ danh sách, bạn có thể điều chỉnh công thức để sắp xếp ngẫu nhiên danh sách tên đầy đủ, sau đó lấy ra 10 tên đầu tiên từ danh sách. Công thức trong F5 sử dụng cách tiếp cận này:
=INDEX(SORTBY(names,RANDARRAY(COUNTA(names))),SEQUENCE(10))
Cách tiếp cận ở đây cũng giống như trên - chúng tôi đang sử dụng INDEX để lấy 10 giá trị từ danh sách tên. Tuy nhiên, trong phiên bản này của công thức, chúng tôi sắp xếp danh sách tên một cách ngẫu nhiên trước khi đưa danh sách cho INDEX như sau:
SORTBY(names,RANDARRAY(COUNTA(names)))
Ở đây, hàm SORTBY được sử dụng để sắp xếp danh sách tên một cách ngẫu nhiên với giá trị mảng được tạo bởi hàm RANDARRAY, như được giải thích chi tiết hơn ở đây.
Cuối cùng, chúng ta cần lấy 10 giá trị. Bởi vì chúng ta đã có tên theo thứ tự ngẫu nhiên, chúng ta có thể chỉ cần yêu cầu 10 tên đầu tiên với một mảng được tạo bởi hàm SEQUENCE như sau:
SEQUENCE(10)
SEQUENCE xây dựng một mảng các số liên tiếp:
(1;2;3;4;5;6;7;8;9;10)
được trả về hàm INDEX dưới dạng đối số hàng. INDEX sau đó trả về 10 tên đầu tiên trong phạm vi tràn giống như công thức ban đầu.