vba生成随机数生成代码,代码如下,不能正常工作

查看: 7142|回复: 9
随机数不随机,如何产生真正的随机数
阅读权限70
在线时间 小时
不随机.JPG (5.08 KB, 下载次数: 41)
17:05 上传
看看这个图片,
就是立即窗口中写入&&?int(rnd*108+1)&&之后就是几个确认就会如图出现的如图的数字
之后关闭所有的EXCEL再重复上面的动作,发现得到的数字,顺序是一样的!!!!!
这样算是随机数吗?
请各位讨论下,
如果要一个程序,定期打开,想要一个随机的数字来找一个文件或什么的吧,
则完全不能达到这个效果的了!
它会按原的顺序来处理!
有没有更易的产生每次不同的随机数!每次打开程序,第一个产生的随机数,也不同的随机数!
阅读权限50
在线时间 小时
这种几率很小吧
阅读权限20
在线时间 小时
下不同的种子就行了。
阅读权限50
在线时间 小时
Sub test()
Columns(1).Select
Selection.Insert
For i = 1 To 10
& & Cells(i, 1) = Int(Rnd * 108 + 2)
Private Sub Workbook_Open()
ThisWorkbook.Save
阅读权限50
在线时间 小时
17& & & & 20& & & & 51& & & & 36& & & & 17
103& & & & 12& & & & 77& & & & 35& & & & 74
17& & & & 107& & & & 90& & & & 47& & & & 88
23& & & & 88& & & & 40& & & & 27& & & & 78
82& & & & 67& & & & 77& & & & 109& & & & 90
103& & & & 38& & & & 83& & & & 7& & & & 102
9& & & & 101& & & & 63& & & & 13& & & & 49
105& & & & 31& & & & 70& & & & 80& & & & 89
18& & & & 69& & & & 62& & & & 24& & & & 75
101& & & & 27& & & & 44& & & & 69& & & & 9
阅读权限70
在线时间 小时
重要在这句
阅读权限70
在线时间 小时
我本来是在VB 中做了,试了几次一样,再到VBA中测试还是一样才发的贴
倒是没用过,明天再试试看吧
阅读权限70
在线时间 小时
刚好我也小小学习过
阅读权限70
在线时间 小时
赵先生的贴子讲了更我的所以然
虽然还不完全明白,
但总算有个概念及知道如何改变了
再谢各位了
阅读权限30
在线时间 小时
原来只知道要加这个randomize,还真不知道其所以然,::L ,学习了。
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师这是我用excel中的vba设计的一个座位随机抽签程序,为什么每次运行的结果都是一样
这是我用excel中的vba设计的一个座位随机抽签程序,为什么每次运行的结果都是一样
如题 有附件
Rnd函数使用给定的种子会生成随机数。因此每次开始都产生同样的随机数。因此每次运行的结果都是一样。
但把剪切改成拷贝后,工作情况已经完全不一样了。变成连续调用Rnd函数。因为以后每一次调用 Rnd 函数,都用数列中的前一个数作为下一个数的种子。每次运行的结果当然是不一样。其实根本没有解决问题。
针对这个问题,VB设计者早已考虑到,解决方法是:
在调用 Rnd 之前,先使用无参数的 Randomize 语句初始化随机数生成器,该生成器具有根据系统计时器得到的种子。
请遵守网上公德,勿发布广告信息
相关问答:
匿名回答于
我试过了,结果并不会一样的,为了更好验证是不是一样,我把代码中的剪切改成拷贝,你也可以试试,结果完全不一样的.
附件:座位抽签.xls
已验证,加Randomize 语句在sub内首句,结果不一样。如果不加,结果就一样。呵可Access俱乐部
?&&&&?&&&&?&&&&?&&&&
您的位置:  > >
如何产生不重复的随机数?
来源:accessbbs&&点击数:7828&&评论数:0 &|&&|&
时 间: 08:08:59
作 者:&&&ID:3202&&城市:绵阳
摘 要:如何产生不重复的随机数?
先创建个类模块:Random
类模块代码如下:
Dim c As Collection
'初始化,定义产生随机数的最小值和最大值
Public Sub Init(min As Integer, max As Integer)
Set c = New Collection
Dim i As Integer
&&& For i = min To max
&&&&&&& c.Add i
'产生不重复的随机数
Public Function RandomNext() As Integer
Dim i As Integer
Dim number As Integer, upperbound As Integer
&&& upperbound = c.Count
&&& If upperbound & 0 Then
&&&&&&& number = Int((upperbound) * Rnd + 1)
&&&&&&& RandomNext = CInt(c.Item(number))
&&&&&&& c.Remove (number)
&&&&&&& RandomNext = 0
&&& End If
End Function
Private Sub Class_Terminate()
&&& Set c = Nothing
Dim r As New Random
Sub Test() '请先运行Init
Dim i As Integer
&&& For i = 0 To 10
&&&&&& Debug.Print r.RandomNext
Sub Init()
&&& r.Init 1, 100
这里使用集合来实现的,也可以用哈希表来做,道理差不多。哈希表需要自己定义类模块。
      
&&&&【&&】&&&&【&&】&&&&【&&】&&&&【&&】&&&&【&&】
Access网店
价格:¥400 元
价格:¥50 元
价格:¥100 元
(10-30 15:27)
(10-30 11:20)
(10-29 22:54)
(10-28 21:09)
(10-28 11:37)
(10-28 10:53)
(10-27 18:31)
(10-27 12:14)
(10-27 11:22)
(10-26 22:36)
Access软件网 版权所有 CopyRight
提供支持 本站特聘法律顾问: 李慧 律师查看: 3777|回复: 8
关于VBA随机函数rnd () 是不是没逐句运行一次就随机一次?
阅读权限20
在线时间 小时
& & & & & & & &
本帖最后由 jietoulanqiuhao 于
00:30 编辑
关于VBA随机函数rnd () 是不是每逐句运行一次就随机一次?
Dim a As Long
a = Int(Rnd() * 10)
Select Case a
& & Case Is & 5
& & Range(&a1&) = & 小于5&
& & Case Is & 6
& & Range(&a1&) = & 小于6&
& & Case Is & 7
& & Range(&a1&) = & 小于7&
& & Case Else
& & Range(&a1&) = & 没有&
End Select
这是我的代码,我用监视窗口监视 a 和rnd的值, 我发现 代码运行到 a = Int(Rnd() * 10)&&的时候rnd的值, 和 进阶下来的一行a的值不是向下取整的值。(有的时候是对的,但是我怀疑一定是运气好)
据上图显示rnd得.94那么a应该得9, 为什么下图是3而不是9?
(11.75 KB, 下载次数: 4)
00:25 上传
(20.51 KB, 下载次数: 4)
00:25 上传
这是第二步照理来说A应该是5啊
阅读权限200
在线时间 小时
Rnd是一个随机值,好比是一个时间,每时每刻都在变化。
当你把某一刻的Rnd赋给变量a后,a的值不会再变,后面的程序由a值大小决定如何运行,Rnd还在继续变,但这个变与后面的过程无关,不用理它。
你的这个帖子“ 发表于
00:26”,当你发完帖子后,如果看一下时间,它(相当于Rnd)肯定不是 00:26,无论是什么时间,都与这个帖子的“发帖时间”(相当于a)无关,差不多就是这个意思。
阅读权限100
在线时间 小时
因为rnd在变化,这很正常
阅读权限20
在线时间 小时
Rnd是一个随机值,好比是一个时间,每时每刻都在变化。
当你把某一刻的Rnd赋给变量a后,a的值不会再变,后 ...
但是我感觉,要么是上一步的9,或者当前的5, 为什么答案却是3.
感觉解释不通啊。
阅读权限20
在线时间 小时
因为rnd在变化,这很正常
但是我感觉,要么是上一步的9,或者当前的5, 为什么答案却是3.
感觉解释不通啊。
阅读权限100
在线时间 小时
但是我感觉,要么是上一步的9,或者当前的5, 为什么答案却是3.
感觉解释不通啊。
你还是没有明白rnd在随时变化这个含义,既然是随机值,这个rnd在随时变化的,他不是一个定值,也不是一个固定变量,你不要把它理解成一个固定变量,就是说当你执行到监视的时候,中间产生了时间差,这个rnd的值就变了,就这么简单
阅读权限95
在线时间 小时
但是我感觉,要么是上一步的9,或者当前的5, 为什么答案却是3.
感觉解释不通啊。
当程序运行后,rnd() 的值在飞速的变化,当在监视窗口显示rnd()值的这一刻,它的值是9,a的值是0,所以,监视窗口显示的是9和0,但是,当给变量a赋值的这一刻,rnd()的值变成了3,a的值也就是3,当运行到Select Case a时,rnd()的值变成了5 (飞速变化),a的值不变,所以显示的是5和3。
阅读权限95
在线时间 小时
Rnd是一个随机值,好比是一个时间,每时每刻都在变化。
当你把某一刻的Rnd赋给变量a后,a的值不会再变,后 ...
譬如不对吧。下面这小段程序,打开,保存,再打开,A1还是一样,不会变。
Private Sub Workbook_Open()
Cells(1, 1) = Int(Rnd * 100)
End Sub复制代码
阅读权限100
在线时间 小时
譬如不对吧。下面这小段程序,打开,保存,再打开,A1还是一样,不会变。
你都保存,并且关闭了工作簿,代码都结束了,还关rnd什么事,你关闭了工作簿之后,那个rnd随机数生成器、计时器状态保存了并且计时器已经停止,你关闭了工作簿再次打开之后,运行了
Cells(1, 1) = Int(Rnd * 100)之后,计时器重新生效,一般的,如果不想两次得到的随机值相同,初使化随机数生成器即可
比如代码改成以下代码
Private Sub Workbook_Open()
& & Randomize
& & Cells(1, 1) = Int(Rnd * 100)
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师

我要回帖

更多关于 java随机数生成代码 的文章

 

随机推荐