在测试程序是否正确的时候,需要填入数据检验,有时需要大量数据检测。如何自动快速生成多个不重复的随机数下面分享一个源码。可生成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数组中。为什么比字典方法快,还是昨天讲的,在循环中调用对象要比调用数值慢的多。
参考自:简美科技(头条号)