excel生成随机数谢谢你提供的程序.我又遇到问题了.这次倒是每次运行宏都得到同样的数字,可是问题是我把区间范围改变如将

问题描述:

excel生成随机数
谢谢你提供的程序.我又遇到问题了.这次倒是每次运行宏都得到同样的数字,可是问题是我把区间范围改变如将1到3070改成1到736,产生的还是同样的数字!其实我做这个的目的是现在我要做问卷调查,需要抽样.我要抽40个社区,每个社区从总户数中抽取59户来做调查.所以我想生成不重复的整数随机数来实现我的抽样.当然每个社区的总户数是不相同的,所以我以为每个社区抽出来的随机数是不一样的(也就是改变区间范围得到的随机数是不同的,可你上次提供给我的程序改变了区间范围还是相同的).我希望如果是相同的社区每次抽样得到的随机数是相同是因为下次别人来验证我的调查依照我的方法还能得到相同的随机数(调查户相同),这样可重复性更好.
请你再帮忙实现一下我的目的.另外如果给出了程序能否简单的解释一下呢?
还想问问randomize的作用是什么?不用randomize,用randomize(带参数),用randomize(不带参数)有什么区别呢?
我在论坛上看到有说“ 要重复随机数的序列,请在使用数值参数调用 Randomize 之前,立即用负值参数调用 Rnd.使用相同的 number 值的 Randomize 不能重复先前的随机数序列.是不是这样做就能实现重复的随机序列了呢?
1个回答 分类:综合 2014-10-22

问题解答:

我来补答
根据你的提示,使用负值调用RND后,基本可以实现,机制还不清楚,俺还没高手到这个程度啊O(∩_∩)O.
代码如下,与之前用法类似,这个需要你在B1格输入户数上限的数字【就是你说的3070、736等等】.或者你直接在宏代码中“max = ……”这行手工输入数值.
Sub suiji()
Dim seed, msg, tmsg, num, max
seed = "20110109"
msg = " "
num = 0
'取得区域上限,就是读取B1格的数值
max = Range("B1").Value
'初始化随机数
Rnd (-1)
randomize (seed & max)
'取得59个不重复随机数
Do Until num = 59
tnum = Int(Rnd() * max) + 1
If InStr(" " & msg & " ", tnum) = 0 Then
num = num + 1
msg = msg & tnum & " "
End If
Loop
'将存储得到的随机数的字符串转成数组
msg = Split(Trim(msg), " ")
'将得到的随机数数组写进A1开始的一列单元格
For num = 0 To UBound(msg)
Range("A" & num + 1).Value = msg(num)
Next
MsgBox "OK !"
End Su
 
 
展开全文阅读
剩余:2000
下一页:老师第一十三题