您现在的位置是:首页 > Excel技巧>Excel VBA快速生成5万个不重复整数

excel vba生成不重复的序列-Excel VBA快速生成5万个不重复整数

发布于2022-04-150人已围观

在测试程序是否正确的时候,需要填入数据检验,有时需要大量数据检测。如何自动快速生成多个不重复的随机数

下面分享一个源码。可生成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数组中。为什么比字典方法快,还是昨天讲的,在循环中调用对象要比调用数值慢的多。


参考自:简美科技(头条号)


相关文章

文章评论

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

标签云

站长特荐