
在我们的工作中,有时会遇到一些随机问题,例如随机排序,随机抽样等. 在Excel VBA中解决这些问题的基础是首先生成一系列随机数. 今天,我们将了解如何使用VBA生成满足我们需求的随机数. 在Excel中生成随机数的函数是Rnd,在VBA中,随机函数也是Rnd. Rnd函数生成的随机数范围是[0,1),包括0但不包括1,然后通过对该范围进行操作,您可以获得符合我们要求的范围. 让我们看一下如何在[1,1000]之间随机生成一个随机数.
子随机数()
'在[1,1000]之间随机生成100个可重复的整数
昏暗arr(1到100),i
随机化

对于i = 1到100
arr(i)= Int((Rnd * 1000)+1)'Rnd [0,1)
下一步
Range(“ A1”). Resize(100,1)= Application.Transpose(arr)
结束子

在程序中,我们首先使用Randomize初始化随机数. 我将简要解释一下. 首先要知道的是,程序生成的随机数不是真正的随机数. 它由程序通过某种算法来计算. 因此,要计算这样的值字符串,需要一个初始值. 如果我们不在乎,则此初始值是系统默认的固定值(我不知道它是多少),并且计算出的序列也固定. 这个序列就是我们从中提取数字的池. 假设池为(1、2、3、4、5),则每次都使用两个随机数,第一个时间可能是(2,3),第一个时间可能是(3,4),但是3永远不会出现在2之前,因此您的随机性会大大降低. 随机化是使用当前时间来初始化此初始值,因为时间不断增加,不可能产生相同的情况,所以随机性更好. 这些只是我自己的理解. 如果有任何错误,请纠正我. 当然,我不必讨论这个问题vba 随机数生成,我可以使用它.
如前所述,Rnd为[0,1),然后Rnd * 1000 + 1为[1,1001),然后使用Int函数舍入为[1,1000],将这些数字临时存储在数组中,最后将其转到A列.
上面绘制的100个数字可能具有重复的值. 如果我们需要生成100个非重复值怎么办?例如,我们要从1000个问题中随机选择100个问题?这时候,我想到了我们之前谈论的字典,让我们看看如何使用它
子非重复随机数()
昏暗arr(1到100),i,d,x

设置d = CreateObject(“ scripting.dictionary”)
随机化
当我做
x = Int((Rnd * 1000)+1)
如果不存在(x)则

i = i + 1
arr(i)= x
如果结束
循环
Range(“ B1”). Resize(100,1)= Application.Transpose(arr)
结束子
上面的代码定义了一个字典d,首先将生成的随机数放入一个临时变量x中,然后判断该字典是否存在xvba 随机数生成,如果不存在,则意味着x首次出现,然后放入将其保存在数组中. 如果已经存在,则表示它已重复,我们将再次使用该数字. 这很简单,因此我不再赘述.
上面的代码可以直接复制到模块中以观察效果,我将不再附加它.
1
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-288380-1.html
康师傅在大陆确实赚的太多太多
图五
果断刷机了