MS Excel:将字符串列随机化为字符串网格

MS Excel:将字符串列随机化为字符串网格

我有一张 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))

答案2

假设名称存储在 A 列中:

  1. 在 B 列中,应用公式=RAND()
  2. 将结果值复制并粘贴到 B 列中,覆盖公式
  3. 在 C 列中,应用公式=RANK(B2, $B$2:$B$101)。这将使您能够为每个名称分配一个 1-100 的数字
  4. 在 10x10 网格上方,添加数字 1-10。在 10x10 网格左侧执行相同操作。这些将用作行和列标题。

现在,假设您的行标题在E2:E11并且列标题在F1:O1...

  1. 在单元格 F2 中输入公式=INDEX($A$2:$A$101, MATCH(($E2-1)*10+F$1, $C$2:$C$101,0))并拖动到 10x10 网格

示例解决方案

答案3

尝试这个数组公式并结束Shift+Ctrl+Enter

=INDEX($A$1:$A$10,RANDBETWEEN(1,COUNTA($A$1:$A$10)))

在此处输入图片描述

相关内容