VBA基础入门(49)35选7该怎么选?(2)

1

上期回顾

有朋友提醒我代码有问题的地方,不知道还有其他人看出来么?

  • 这个能出现重复的随机数

  • +一句randomize

2

Randomize 语句

上期分享RND的时候,讲到如果RND省略参数,那么它将系统时间作为种子来生成随机数。这个Randomize 的作用就是初始化随机数生成器。
【示例】

此示例使用 Randomize 语句初始化随机数生成器。由于省略了 number 参数,因此 Randomize 使用函数的返回值 Timer 作为新的种子值。

' 初始化随机数生成器Randomize()'生成1-6之间的随机数Dim value As Integer = CInt(Int((6 * Rnd()) + 1))
【注解】
此方法的重载不 Randomize 采用种子值。相反,系统计时器返回的值将用作新的种子值。
如果 Randomize 未使用,则 Rnd 没有) 参数的函数 (在第一次调用时将使用与种子相同的数字,并且随后使用最后生成的数字作为种子值。

接下来说说怎么避免重复这个事情,因为涉及取整,所以很有可能生成重复的随机数。

只需要check一下这个随机数出没出现过就可以了,定义一个数组,用于存放这个随机数出没出现过的信息。

【代码】
Sub Randomizing()   Dim MaxNum As Long   Dim flg() As Boolean   Dim num As Long   Dim i As Long   Dim Number() As Long   MaxNum = 10 '←最大值   ReDim Number(1 To MaxNum) As Long   ReDim flg(1 To MaxNum) As Boolean   Randomize   For i = 1 To MaxNum      Do         num = Int(Rnd * MaxNum) + 1         ' 如果这个随机数没出现过就会放到Number里面,         ' 如果出现了则生成心得随机数,知道不重复为止         If flg(num) = False Then            flg(num) = True            Number(i) = num            Exit Do         End If      Loop   Next i   For j = 1 To MaxNum      Cells(j, 1).Value = Number(j)   NextEnd Sub
(0)

相关推荐