我有一张 MS Excel 表,其中一列有 100 个姓名。
在另一张表上,我有一个 10 x 10 的单元格网格,我想从该列中随机分配一个名称。
有没有相对简单的方法来实现这一点,或者是否涉及 VBA 类型的工作?
答案1
可以使用辅助列来创建从 1 到 100 的随机顺序号。将您的姓名放在 A2:A101 中。在 B2 中输入:
=AGGREGATE(15,7,ROW($1:$100)/(COUNTIFS($B$1:B1,ROW($1:$100))=0),RANDBETWEEN(1,100-COUNT($B$1:B1)))
并抄下来。
这将在 AGGREGATE 中随机选择一个介于 1 和 100 之间的数字,其中 k 为RANDBETWEEN(1,100-COUNT($B$1:B1))
。同时COUNTIFS($B$1:B1,ROW($1:$100))=0
确保我们不会得到重复项。
然后我们使用 INDEX/MATCH 来查找值。将其放在网格的右上角:
=INDEX($A:$A,MATCH((ROW($A1)-1)*10+COLUMN(A$1),$B:$B,0))
拖动鼠标时,它会在第一行查找 1-10,在第二行查找 11-20,依此类推。由于查找列是随机的,因此查找结果将是随机的。
然后复制上面 10 个和下面 10 个:
如果有人拥有 Office 365 Excel,那么 INDEX/MATCH 可以用这个动态版本替换,它将自动溢出 10x10:
=INDEX(A:A,MATCH(SEQUENCE(10,10),B:B,0))