龙空技术网

如何能产生可控的30个不重复的随机数

VBA语言専攻 446

前言:

现在朋友们对“抽取不重复的随机数”大体比较看重,同学们都需要知道一些“抽取不重复的随机数”的相关文章。那么小编也在网摘上收集了一些对于“抽取不重复的随机数””的相关文章,希望看官们能喜欢,大家快快来学习一下吧!

在工作中我们会经常遇到一些较为纯粹的数学问题,比如要产生可控的30个不重复的随机数,什么意思呢?就是要产生一组30个的随机数,这30个数是不重复的,但是要求这30个数的产生是可控的,就是说要在需要产生时要实时产生。

这时我们要用到一个RANDBETWEEN函数,作为我们实现目的主要函数:还需要一个迭代运算的设置,下面我一一讲解:

一:RANDBETWEEN函数

返回大于等于指定的最小值,小于等于指定最大值之间的一个随机整数。每次计算工作表时都将返回一个新的数值。

定义:返回位于两个指定数之间的一个随机整数。 每次计算工作表时都将返回一个新的随机整数。

语法:RANDBETWEEN(bottom,top)

Bottom参数: RANDBETWEEN将返回的最小整数。

Top参数: RANDBETWEEN将返回的最大整数。

二 另外,为了实现这个功能,我们还需要用到迭代运算:

如下面的设置:工具》》选项》》重新计算》》勾选迭代运算,次数可以根据实际情况设置,我下面的例子是产生30个数,设置的迭代次数是100就够用了。

上面的内容准备好后,我们看今天的实例,并实现:

要求在30个单元格里使用randbetween(1,500),随机抽取产生1-500之间的任意数,这30个数中不要出现重复的数,并要求在需要是实时产生。

首先我们在A1单元格中录入下面的的公式:=IF(COUNTIF($A$1:$E$6,A1)=1,A1,RANDBETWEEN(1,500)),并一直拖满到E6的单元格,正好是30个单元格的位置。公式讲解:以A1单元格的公式为例,这个公式要求在A1单元格中出现一个随机数RANDBETWEEN(1,500),当这个随机数产生后,公式会有一个判断,就是满足:COUNTIF($A$1:$E$6,A1)=1也就是说要在$A$1:$E$6中和A1值相等的数是1个,当确实是1个时那么不再变化,当不是1个的时候,那么将再次产生随机数RANDBETWEEN(1,500),然后再次判断,直到满足条件为止。但最多的迭代次数是100次,即将产生最多100次的重复计算,所以这个最大的迭代次数很关键,如果选的小了,肯定不会满足我们的要求。

好,看下面的截图:是一组已经产生了的不重复的30个数字:

问题写道这里,仿佛是写完了,其实还没有,上面的方法是产生了我们需要的30个数,但是题目要求是在需要的时候实时产生,这怎么办呢?我们再增加一个条件语句,即可达到此效果,公式如下: =IF(COUNTIF($A$1:$E$6,A1)=1,IF($G$1=1,RANDBETWEEN(1,500),A1),RANDBETWEEN(1,500))

此时G1为控制格,当在G1输入数字1,就开始变化。但变化后的数据有可能不惟一了,怎么办?把1清除即可!

我们还是先讲一个上面的公式中新增的判断条件:

=IF(COUNTIF($A$1:$E$6,A1)=1,IF($G$1=1,RANDBETWEEN(1,500),A1),RANDBETWEEN(1,500))

IF($G$1=1,RANDBETWEEN(1,500),A1) 这部分是新增的判断,也就是说,当数字是唯一的时候,当G1不是1的时候才不发生变化,否则,只要是G1的单元格变化为1时,随机数将重新产生。有些拗口,大家可以仔细的研究一下上面的公式:

我们看看下面的返回截图:

果然出现了两个重复的数值,我们把G1清空,再看下面的截图:

好了,这就达到了我们的目的,当我们需要产生这样的随机数时,只需要在G1中录入1,然后再删掉。

今日内容回向:

1 RANDBETWEEN函数的意义是什么?

2 如何随机产生1-500之间的30个任意数中,不要有出现重复的数,并要求在需要时实时产生。

标签: #抽取不重复的随机数