VBA,大神们帮忙看下为什么产生的两组随机数相同呢。

SubMacro1()DimArr1,Arr2(1To13,1To15000),Temp1Fori=1To15000i=i+1Arr1=Array("1","2","3"... Sub Macro1()
Dim Arr1, Arr2(1 To 13, 1 To 15000), Temp1
For i = 1 To 15000
i = i + 1
Arr1 = Array(" 1 ", " 2 ", " 3 ", " 4 ", " 5 ", " 6 ", " 7 ", " 8 ", " 9 ", " 10 ", " 11 ", " 12 ", " 13 ")
Temp1 = 0
Do Until UBound(Arr1) < 0
Temp1 = Temp1 + 1
a = Arr1(Int(Rnd * (UBound(Arr1, 1) + 1)))
Arr1 = Filter(Arr1, a, False)
Arr2(Temp1, i) = a
Loop
i = i + 1
Arr1 = Array(" 1 ", " 2 ", " 3 ", " 4 ", " 5 ", " 6 ", " 7 ", " 8 ", " 9 ", " 10 ", " 11 ", " 12 ", " 13 ")
Temp1 = 0
Do Until UBound(Arr1) < 0
Temp1 = Temp1 + 1
a = Arr1(Int(Rnd * (UBound(Arr1, 1) + 1)))
Arr1 = Filter(Arr1, a, False)
Arr2(Temp1, i) = a
Loop
Next
Randomize

Range(Cells(2, 1), Cells(14, 15000)) = Arr2
Randomize

Range(Cells(16, 1), Cells(28, 15000)) = Arr2
End Sub
展开
 我来答
crazy0qwer
2012-12-31 · TA获得超过3301个赞
知道大有可为答主
回答量:4020
采纳率:71%
帮助的人:1330万
展开全部
1、首先,Randomize 只需要用一次就可以了。而且要在产生随机数前调用。你上面的代码,先产生
随机数然后再初始化随机数函数,这样是不行的。

2、其次,你这个代码产生随机序列相同的原因跟 Randomize 没有任何关系。原因在于你两个产生随机
数的 DO循环里面都是这样给数组 Arr2 赋值的,Arr2(Temp1, i) = a。而Temp1的范围都是一样的,
所以你第二次循环里面就把第一次产生的数给覆盖掉了。

3、解决办法:
一、在每个循环结束后马上使用随机数,即第一个循环结束后马上用
Range(Cells(2, 1), Cells(14, 15000)) = Arr2 然后再产生新的随机数。
二、再定义一个数组,把两次产生的随机数放到不同数组中。
三、扩大数组第一维的范围,并且使两个Arr2(Temp1, i) = a 中Temp1的值值不一样。
追问
第一种方法可以,但是我如果想产生n组的话,如何改比较简单。
追答
后面两种不行吗?
Do Until UBound(Arr1) < 0
Temp1 = Temp1 + 1
a = Arr1(Int(Rnd * (UBound(Arr1, 1) + 1)))
Arr1 = Filter(Arr1, a, False)
Arr2(Temp1, i) = a
Loop
i = i + 1
Arr1 = Array(" 1 ", " 2 ", " 3 ", " 4 ", " 5 ", " 6 ", " 7 ", " 8 ", " 9 ", " 10 ", " 11 ", " 12 ", " 13 ")
Temp1 = 0 ‘把这句话去掉,即让下面产生的随机数跟在上面的后面而不是覆盖。当然定义的范围你自己改。具体就是 temp1 在[1,13]里面放的第一组随机数, 在[14,26]里面放的是第二组随机数。其实你要产生多少组就定义多少个数组这样更简单容易理解点
Do Until UBound(Arr1) < 0
Temp1 = Temp1 + 1
a = Arr1(Int(Rnd * (UBound(Arr1, 1) + 1)))
Arr1 = Filter(Arr1, a, False)
Arr2(Temp1, i) = a
Loop
Next
百度网友eb9c235
2012-12-31 · TA获得超过478个赞
知道小有建树答主
回答量:511
采纳率:100%
帮助的人:273万
展开全部

嗯,不知道你的两组数是什么意思,但是你最后面的赋值你认为是正确的吗?EXECL那有那么多列?最后的结果是不是像下图这样?

追问

不是,我想要这样的。有啊,我用的是2010..

追答
没用过2010,也没用过Randomize,

我想应该不会加一句 Randomize,就完全改变一个数组内的值吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
thirtyname
2012-12-31 · TA获得超过107个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:125万
展开全部
没仔细看你的代码,但是根据你的程序流程来看,第一次输出Arr2和第二次输出ARR2之间的间隔没有任何对数组变更的操作,所以你输出的数据不会有变化。
追问
如何初始化随机器使产生的两组随机数不同呢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式