Excel 使用公式生成不重复的随机数

Excel 使用公式生成不重复的随机数,excel,random,excel-formula,Excel,Random,Excel Formula,我想生成4个介于0和20之间的随机数,它们之间不会重复。i、 e.对于每个后续生成的随机数,必须排除任何先前生成的随机数的值 例如 第二个生成的随机数不得等于第一个,第三个不得等于第一个和第二个,最后第四个不得等于第一个、第二个和第三个 如何使用Excel公式实现这一点?将其放在A2中: =AGGREGATE(15,6,(ROW($1:$21)-1)/(COUNTIF($A$1:A1,(ROW($1:$21)-1))=0),RANDBETWEEN(1,22-ROW(1:1))) 复制四个细胞

我想生成4个介于0和20之间的随机数,它们之间不会重复。i、 e.对于每个后续生成的随机数,必须排除任何先前生成的随机数的值

例如

第二个生成的随机数不得等于第一个,第三个不得等于第一个和第二个,最后第四个不得等于第一个、第二个和第三个

如何使用Excel公式实现这一点?

将其放在A2中:

=AGGREGATE(15,6,(ROW($1:$21)-1)/(COUNTIF($A$1:A1,(ROW($1:$21)-1))=0),RANDBETWEEN(1,22-ROW(1:1)))
复制四个细胞


我觉得这很吸引人。我可以看到它没有复制任何值,并且是一致的。我可以把它拖到20个单元格,每次都会以不同的顺序给出所有20个数字。如果你不介意解释一下,你能告诉我这个公式是如何工作的吗?我觉得这里有太多需要学习/解包的东西,我目前还不了解…@jeranon Aggregate允许使用数组<代码>行($1:$20)创建一个从1到20的数字数组。
/(COUNTIF($A$1:A1,ROW($1:$20))=0)
是唯一性的原因。如果它已经存在,那么它将导致一个
#DIV/0
错误,要求聚合忽略该错误,第二个标准是
6
。因此,每次它被复制下来,都会创建一个越来越小的尚未使用的数字数组。然后randtween()是
k
,它告诉聚合返回哪个。我们需要每次缩小一个范围,因为数组每行向下减少一个。因此,为了确保我理解这一点,原始数组不输出任何内容,这是一种提供包含20个唯一变量的原始数据集的方法。从那里,数组的每次迭代都会从数组中删除一个变量,然后从新的简化数据集中随机选择一个变量。构建这样一个公式感觉像是从我所使用的非常线性的公式中跳了一大步。是否有您认为特别有用的资源,我可以自己去挖掘?谢谢你。@jeranon你说得对。至于我们要学的,我没有建议,我只是通过实践来学习。这个公式会产生一个0吗??