Công thức Excel: Danh sách tên ngẫu nhiên
Công thức Excel: Danh sách tên ngẫu nhiên

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 INDEXHàm RANDARRAY để chọn 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 tôi không muốn Độc thân tên ở một vị trí đã biết, chúng tôi muốn 10 tên ngẫu nhiên tại các vị trí không xác định 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 một tập hợp các số nguyên ngẫu nhiê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 chức năng 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 giống như ở trên – chúng tôi đang sử dụng INDEX để truy xuất 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 tôi đã có tên theo thứ tự ngẫu nhiên, chúng tôi 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ư thế này:


SEQUENCE xây dựng một mảng các số tuần tự:

{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 một phạm vi tràn giống như công thức ban đầu.

https://exceljet.net/formula/random-list-of-names