我创建了一个VBA函数,它将生成一个随机生成的格式为XX00XXX的字符串。我在excel电子表格中运行此操作以创建超过400000个连续出版物,但是同一个字符串的重复次数异常高;超过60%的字符串具有多个实例(在某些情况下> 250)!我希望有一些重复,但远不及这个水平。我的代码有问题吗?或许这是我参加抽奖的一周。
Function NewVRN() As String
Dim strOne As String
Dim strTwo As String
Dim strThree As String
Dim strFour As String
Dim strFive As String
Dim strSix As String
Dim strSeven As String
' Initialize the seed using Timer.
Randomize
'Generate random letters
strOne = Chr(Int((90 - 65 + 1) * Rnd) + 65)
Randomize
strTwo = Chr(Int((90 - 65 + 1) * Rnd) + 65)
Randomize
strFive = Chr(Int((90 - 65 + 1) * Rnd) + 65)
Randomize
strSix = Chr(Int((90 - 65 + 1) * Rnd) + 65)
Randomize
strSeven = Chr(Int((90 - 65 + 1) * Rnd) + 65)
Randomize
'Generate random numbers
strThree = Chr(Int((57 - 48 + 1) * Rnd) + 48)
Randomize
strFour = Chr(Int((57 - 48 + 1) * Rnd) + 48)
'Concatenate and build the VRN
NewVRN = strOne & strTwo & strThree & strFour & strFive & strSix & strSeven
End Function
该函数作为Sub的一部分被调用,它首先执行其他一些“东西”,然后(在调用函数时)将结果简单地写入单元格并选择下一个单元格。它快速连续完成,没有其他操作。据我所知,下一次通话时不会重复连续剧。
我在这里看过其他一些解决方案,但似乎没有人回答这个具体问题。人们普遍认为RNG在办公室存在局限性,但我认为这里的观察是非常极端的。现代处理器也存在问题(每个定时器间隔有几个计算)但随机化语句和函数的独立执行应该已经解决了这个问题。
P.S。理想情况下,我想要一个基本上唯一的随机序列列表 - 接受概率意味着重复次数最少。最后我创建了一个循环,每次都会在序列中添加一个循环(即AA00AAA,AA00AAB等)。我仍然想知道为什么我的随机发生器不工作!
答案 0 :(得分:1)
您只需在程序开头调用Randomize
一次。
每次调用Randomize
(未指定种子)时,VB正在使用系统计时器设置下一个要使用的随机数。
快速连续调用Randomize
并使用相同的随机数运行VB的风险,这是您所观察到的。