VBA生成特定范围内的随机数| VBA示例教程

电脑杂谈  发布时间:2020-07-27 04:04:13  来源:网络整理

vba 随机数生成不重复_vba 随机数生成_vba生成随机数

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

子随机数()

'在[1,1000]之间随机生成100个可重复的整数

昏暗arr(1到100),i

随机化

vba生成随机数_vba 随机数生成不重复_vba 随机数生成

对于i = 1到100

arr(i)= Int((Rnd * 1000)+1)'Rnd [0,1)

下一步

Range(“ A1”). Resize(100,1)= Application.Transpose(arr)

结束子

vba 随机数生成_vba 随机数生成不重复_vba生成随机数

在程序中,我们首先使用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

vba 随机数生成不重复_vba 随机数生成_vba生成随机数

设置d = CreateObject(“ scripting.dictionary”)

随机化

当我做

x = Int((Rnd * 1000)+1)

如果不存在(x)则

vba 随机数生成_vba 随机数生成不重复_vba生成随机数

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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...