文章插图
还有一个名为Randomize的 VBA 函数 。可以在Rnd函数之前使用它来将种子值重置为计时器事件或任何给定的参数
Sub RandomNumberV2() Randomize (10) MsgBox Round((Rnd() * 7) + 3) End Sub 6/ 生成不重复的随机数
可能会遇到这样一种情况:想生成一系列随机数,但又不想看到任何重复值出现 。
可能希望从 1 到 10 的数字之间选择 3 个随机数,但其中 3 个所选数字中的每一个都是唯一的 。
有几种可能的解决方案:
RANK.EQ 和 COUNTIF 函数的解决方案:
先使用RANDBETWEEN创建随机数,然后使用下一列中的公式对它们进行排名,从而从 1 到 10 的随机排序序列
= RANDBETWEEN ( 1, 10 )
文章插图
然后,可以使用RANK.EQ函数对它们进行排名,以创建一个从 1 到 10 的序列,该序列是随机排序的
= RANK.EQ ( B2, $B$2:$B$11 ) + COUNTIF ( $B$2:B2, B2 ) - 1
文章插图
注意,公式使用了绝对引用($符号),以便在向下复制公式时公式引用保持固定用 VBA 解决:
还可以使用 VBA 生成一串从 1 到 10 的无重复随机数
Sub RandomNumberNoDuplicates() Dim M As Integer, Temp As String, RandN As Integer For M = 1 To 5 Repeat: RandN = Round((Rnd(10) * 9) + 1, 0) If InStr(Temp, RandN) Then GoTo Repeat ActiveSheet.Cells(M, 1) = RandN Temp = Temp & RandN & "|" Next M End Sub 代码迭代从 1 到 5 的值,每次生成 1 到 10 之间的随机数 。
它测试随机数以检查它是否已经生成 。这是通过将成功的数字连接成一个字符串然后搜索该字符串以查看该数字是否已被使用来完成的 。
如果已找到,则它使用标签重复返回并重新生成一个新号码 。再次测试它尚未使用 。如果是新号码,则将其添加到工作表中
动态数组的解决方案:
假设要从序列 1 到 10 中返回 5 个数字 。您希望每个选择的数字都是唯一的 。这可以使用SEQUENCE、SORTBY、RANDARRAY和INDEX函数的组合来完成
=INDEX( SORTBY( SEQUENCE(10), RANDARRAY(10) ), SEQUENCE(5) )
文章插图
上面的公式创建了一个从 1 到 10 的数字序列
然后使用SORTBY函数以随机顺序对它们进行排序,并对RANDARRAY函数生成的随机数列进行排序 。效果是按随机顺序对序列进行排序 。
现在,如果想获得 5 个随机且唯一的数字,只需从随机排序的序列中取出前 5 个数字 。这正是INDEX函数所做的!这部分公式将从随机排序的序列中返回前 5 个数字
结论
在 Excel 中有多种生成随机数的方法 。无论您需要整数、小数还是具有上限和下限的随机数范围,都可用Excel来生成 。
但是,请记住,这些数字是由算法生成的伪随机数 。尽管随机数生成器通过了所有随机性测试,但它们并不是真正的随机数
- 知识科普太阳的主要组成部分 太阳的主要成分
- 盘点人体需要的微量元素 微量元素是指哪些
- 团队精神养成话术 团队凝聚力的句子有哪些
- 图文讲解打印机的连接方法 怎样连接网络打印机
- 详解西方万圣节的具体时间 万圣节是什么时候
- 送钢笔的寓意是什么意思 送钢笔代表什么意思-送钢笔含义
- 李经方的个人简介及生平经历 李经方故居图片
- 豆瓣评分最高的十部国产电影 最好看的华语电影排行榜前十名
- 仙人跳是啥意思 传统仙人跳的三大常用手段揭秘
- 诗词鉴赏古诗词中的乌衣巷 乌衣巷位于什么地方