使用VBA生成不重复的随机数

2025-10-20 01:20:53

1、打开Excel表格,点击【开发工具】、【Visual Basic】打开VBA编辑器。

使用VBA生成不重复的随机数

2、在VBA编辑器窗口点击【插入】、【模块】。

使用VBA生成不重复的随机数

3、在“模块”的代码窗口里边输入以下VBA程序代码:

Sub RandomNumberSelect()

Dim i, j, k, x, rn, h, m, n

On Error Resume Next  '忽略运行过程中可能出现的错误

Set mysheet1 = ThisWorkbook.Worksheets("Sheet1")  '定义工作表

mysheet1.Range("A3:G100").Value = ""  '清空单元格内容

n = IsNumeric(mysheet1.Cells(2, 8))   '判断填充的内容是否为数值

If mysheet1.Cells(2, 8) <> "" And n = True And mysheet1.Cells(2, 8) >= 1 Then

 '如果要生成的随机数个数的单元格不为空白,且为数值(数值>=1),则:

  h = Int(mysheet1.Cells(2, 8)) + 2  '从第三行开始

   For m = 3 To h

    Set myrange = mysheet1.Range(mysheet1.Cells(m, 1), mysheet1.Cells(m, 6))

     x = 0 '初始值为0

     j = 0

      Do

       k = Int(Rnd * 33 + 1) '1-33的随机整数

       i = Application.WorksheetFunction.CountIf(myrange, k)

        'i,统计数值在同一行(如:A3:F3)里边出现是次数

        For Each rn In myrange  '循环同一行单元格区域里边的每一个单元格

         If i = 0 And rn = "" Then   '如果没有出现过且单元格为空白

          rn.Value = k   '将数值写入该单元格里边

          j = j + 1

          Exit For  '退出For循环

         End If

        Next

         x = x + 1  '中间变量值递增1

        If j = 6 Or x = 200000 Then  '如果数值已经填充到第六列,或x条件满足

         mysheet1.Cells(m, 7).Value = Int(Rnd * 16 + 1)   '从1-16里边随机选择出1个整数

         Exit Do  '退出Do循环

        End If

      Loop

    Next

End If

End Sub

使用VBA生成不重复的随机数

4、程序函数、思路解读:

(1)先判断要生成的随机数组的个数是否为空白、或者非数值,条件满足再执行后边的程序,以提高运行速度;

(2)Rnd函数的取值范围是>=0,且<1的随机数;

(3)Int是取整函数;

(4)For循坏每执行一次,将会执行一行的判断;

(5)使用Do循环时,应当避免死循环的情况发生,所以,应当加设一个条件,以免无法求出结果时无法退出循坏。

5、回到Excel工作表界面,点击【插入】,在“形状”里边选择一个图形(如:长方形)并在Excel工作表上面绘制。

使用VBA生成不重复的随机数

6、在绘制好的图形上边单击右键,选择“指定宏”,选择已经在模块程序里边写好的宏的名称(如:RandomNumberSelect),然后点击【确定】。

使用VBA生成不重复的随机数

使用VBA生成不重复的随机数

7、在指定的单元格(如:H2)里面输入要生成随机数组的个数,点击已经绘制的图形按钮(已经指定该宏),即可生成随机整数。(同一行的前6个整数不重复)

使用VBA生成不重复的随机数

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢