无重复的随机数

问题的形成

假设我们需要在给定的值范围内创建一组不重复的整数随机数。 旅途中的例子:

  • 为产品或用户生成唯一的随机代码
  • 将人员分配给任务(从列表中随机分配一个)
  • 搜索查询中的单词排列 (hello seo-shnikam)
  • 玩乐透等

方法1.简单

首先,让我们考虑一个简单的选项:我们需要从 10 到 1 随机获取 10 个整数。使用 Excel 中内置的函数 案例之间 (边缘之间) 不保证唯一性。 如果您在工作表单元格中输入它并将其复制到 10 个单元格中,则很容易发生重复:

无重复的随机数

因此,我们将走另一条路。

所有版本的Excel都有一个功能 (响),用于排名,或者换句话说,确定一个数字在集合中的最高位置。 列表中最大的数字排名=1,排名第二的数字排名=2,依此类推。

让我们在单元格 A2 中输入函数 信息系统 (兰德) 没有参数并将公式复制到 10 个单元格。 该函数将为我们生成一组 10 个从 0 到 1 的随机小数:

无重复的随机数

下一栏我们介绍函数 确定每个接收到的随机数在排名中的位置:

无重复的随机数

我们在 B 列中得到了我们想要的——从 1 到 10 的任意数量的非重复随机整数。

纯粹从理论上讲,可能会出现一种情况 信息系统 将在 A 列中为我们提供两个相同的随机数,它们的等级将匹配,并且我们将在 B 列中得到重复。但是,鉴于精度为小数点后 15 位,这种情况的可能性非常小。

方法2.复杂

这种方法稍微复杂一些,但只使用了一个数组公式。 假设我们需要在一张纸上创建一个 9 到 1 范围内的 50 个非重复随机整数的列表。

在A2单元格输入以下公式,最后点击 Ctrl + Shift + Enter (将其作为数组公式输入!)并将公式复制到所需的单元格数量:

无重复的随机数

方法 3. 宏

当然,您可以使用 Visual Basic 编程来解决这个问题。 在一篇关于随机抽样的旧文章中,我已经引用了 Lotto 数组宏函数,它从给定的间隔产生所需数量的随机非重复数字。

  • 如何统计一个范围内唯一值的数量
  • 从列表中随机选择元素

发表评论