|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
经常看到有朋友需要生成不重复的随机数,经过一晚上奋战,终于搞出来了,分享一下,请大家斧正。
更改d1到d3单元格可以修改相关参数
Sub CreateRND()
Dim arr() As Integer '定义数组
ReDim arr(range("d3").Value) '更改数组大小
Dim min As Integer '定义随机数的最小值
Dim max As Integer '定义随机数的最大值
Dim flag As Boolean '定义标志变量,用来判断是否有重复值
max = range("d2").Value '将d2单元格的数值赋值给最大值
min = range("d1").Value '将d1单元格的数值赋值给最小值
If (max - min + 1 < range("d3").Value) Then '如果最大值和最小值的差小于d3单元格的数值就什么也不做
Exit Sub
End If
Randomize (Now()) '用当前时间生成随机数种子
For i = 0 To range("d3").Value '循环生成随机数
Do
arr(i) = Rnd() * (max - min) + min '生成随机数
flag = False
For j = 0 To (i - 1) '循环判断当前的随机数是否和前面生成的随机数相同,如果相同就重新生成
If (arr(i) = arr(j)) Then
flag = True
End If
Next
Loop While flag
Next
Columns("A:A").ClearContents
range("a1").Resize(range("d3").Value) = Application.Transpose(arr) '输出结果
End Sub
[ 本帖最后由 toopoor 于 2011-1-22 21:05 编辑 ] |
|