VBA例3 生成指定次数的指定随机数

555.jpg

如题,在31个单元格中,随机生成指定次数的1

思路:

传统思路是将生成0-31之间的随机数,然后将生成随机数对应的单元格值修改为1。但归根到此问题上,该问题是一个考勤表随机生成,所以大部分的随机数应该是1,换句话话说1的总次数在0和31之间,大都接近31,毕竟正常人都需要经常上班哈。因此,带来一个执行效率的问题,即如果考勤天数是25天以上,则在每次生成随机数0-25的概率要大于25-31的概率,所以,此题需要反思路解决,即首先将31个单元格全部填1,然后执行(31-考勤天数)次随机数循环代码,并将对其对应的单元格清空,最后达到传统思路同样的效果,且代码执行效率较高。

细节:

没有细节,撸就完了!

代码:

Sub t1()
Dim i, n, x
i = [a66356].End(xlUp).Row
Range("b4:af" & i) = 1
For x = 4 To i
    Do While Application.CountA(Range(Cells(x, 2), Cells(x, 32))) <> Cells(x, 1).Value
        n = Int(31 * Rnd + 2)
        Cells(x, n).ClearContents
    Loop
Next
End Sub

效果:


444.jpg

你可能感兴趣的:(VBA例3 生成指定次数的指定随机数)