人气 4516

Excel VBA快速生成5万个不重复整数 [复制链接]

张淮程 2017-9-2 16:55:58
在测试程序是否正确的时候,需要填入数据检验,有时需要大量数据检测。如何自动快速生成多个不重复的随机数下面分享一个源码。可生成50000个不重复的1~100000的随机整数在VBA中直接使用(RND()*99999+1)即可直接生成,但是要去除重复有点麻烦,如果你有一定基础,你会想到用VBA字典的方法详细源码:Sub 生成不重复随机数()   Dim k As Long  Dim d As New Dictionary  t = Timer  Do    k = (Rnd() * 99999 + 1) * 1    d(k) = ""  Loop Until d.Count = 50000  Debug.Print Timer - t End Sub上面的代码是用VBA字典的key装入1~100000的随机数字,利用Key不能重复的特点留下非重复数值。运算速度为0.2s。
下面的方法比字典快接近10倍,只需要0.03s即可生成5万个不重复数字。Sub 生成随机数()   Dim k As Long  Dim arr1(1 To 50000, 1 To 1), arr2(1 To 100000)  t = Timer   Do    k = (Rnd() * 99999 + 1) * 1    If arr2(k) = "" Then      arr2(k) = k      m = m + 1      arr1(m, 1) = k    End If     Loop Until m = 50000  Debug.Print Format(Timer - t, "0.00")End Sub
分析:其实这种方法和使用字典很相似,利用数组的序号不重复的特点,把生成的整数作为arr2数组的序号使用(arr2(k) = k),把第1次出现的数装到arr1数组中。为什么比字典方法快,还是昨天讲的,在循环中调用对象要比调用数值慢的多。
参考自:简美科技(头条号)
您需要登录后才可以回帖 登录 | 立即注册

QQ|手机版|精益人 ( 沪ICP备19004111号-1 )|网站地图

GMT+8, 2024-12-23 04:50 , Processed in 0.238377 second(s), 20 queries .

Powered by Lean.ren X3.5 Licensed  © 2001-2030 LEAN.REN