qihongju 发表于 2013-10-11 18:07
问题我解决了,还是我指定区域的时候出错了
Sub 生成不重复随机数() '相当于将指定范围的有序整数随机排列
Dim i As Long, j As Long
'指定上限,默认为100,默认的下限是1
i = Application.InputBox("请输入上限:" & Chr(10) & "输入1000即表示产生1到1000的不重复随机数" & " 以此类推!范围在1--60000之间。" & Chr(10) & "结果产生在新工作表。" & Chr(10) & "如果输入的数超过10000,可能要计算3-5秒,请等候结果显示!", "输入上限", 10, , , , , 1)
If i = False Or i < 1 Then Exit Sub '如果选择取消或者数字小于0则退出程序
Dim arr1, A, B, temp
ReDim arr1(1 To i)
For j = 1 To i
arr1(j) = j
Next
For j = 1 To i '在下限与上限之间循环,将数组Arr1中的数据打乱
A = Int(Rnd() * i) + 1
B = Int(Rnd() * i) + 1
temp = arr1(A)
arr1(A) = arr1(B) '
arr1(B) = temp
Next
'将数组的值输出到单元格中
Dim rngs As Range, rng As Range
Set rngs = Application.InputBox("选择输出的数据区域", , , , , , , 8)
j = 0
For Each rng In rngs
If j = UBound(arr1) Then Exit Sub
j = j + 1
Range(rng.Address) = arr1(j)
Next
End Sub
增加了可以选择输出区域,那你要少点选的区域小点就行了