在使用过程中发现每次重新打开工作簿时,执行一次Rnd函数的宏,都会得到一个相同的随机数,后来看了一下“帮助”,在Rnd函数前加入Randomize就可以解决这一问题,但本人还是有点不放心,是不是这样做就会产生一个真正的随机数呢
最好能“剖析”一下Rnd,Randomize工作原理,越详细越好,即详细又准确的会加20分
多谢了,高手们!问题补充:
有如下命令:
Randomize
for a=1 to 6
cells(1,a)=rnd
next a
这是一个产生6个随机数的例子,如果前面没有Randomize时每次打开工作簿会产生同一个6个数的数列,那么加了Randomize(在For语句前)后,那这6个数之间的排列关系(注意:不是指这6个数的数值本身,数值本身应该是变的)是不是还是没变呢?
如果还是没变,那把Randomize加在For语句后cells前,那是不是就会改变呢?
如果还是没变,那有什么办法可以使这6个数完全随机化么?
满意答案
gupiao0000019
LV12
2013-08-29
Randomize Timer 用这个 它会以当前时间作为随机数种子,之后再产生的随机数就确实是真真正正的随机的了。
Rnd 每次执行都会合上一次Rnd的结果有关,也就是说是用上一个Rnd的结果演算过来的,所以
如果不进行初始化,那么一串 rnd 执行多少次 都一样。
只要使用了 Randomize timer之后 就相当于从一个时间点初始化了Rnd一下,那一串rnd 就不会再每次都一样了 ,因为 timer 函数 每次的时间都不一样
dim aa as int
randomize
aa=fix(rnd100)+1
因为rnd在0到1之间但他不包括1所以>>>>>>>>>>>
好的程序来了,自己写的,已经验证OK!!!
Private Sub Command1_Click()
Randomize
MsgBox Int((100 - 10 + 1) Rnd + 10)
End Sub
这是一个随机产生10到100之间的随机数的程序,也就是只能产生2位数的!
如果你想产生一个数到另一个数之间的随机数,可以这样做:
Int((upperbound - lowerbound + 1) Rnd + lowerbound)
这里,upperbound 是随机数范围的上限,而 lowerbound 则是随机数范围的下限。
rnd()是VB60中随机产生0-1之间浮点数的函数,若要在第一个文本框(text1)中产生(0,1)之间的随机数,则用
text1text=rnd
若在文本框2(text2)中产生(0,10)之间的随机实数,则
text2text=rnd10
若在文本框3(text3)中产生[10,100]的随机整数,则
text3text=int(rnd(100-10+1))+10
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)