vba提取排名前三的单元格(VBA例3生成指定次数的指定随机数)(1)

如题,在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

vba提取排名前三的单元格(VBA例3生成指定次数的指定随机数)(2)

,