随机数创建

时间:2018-05-02 21:21:19

标签: vba excel-vba excel

我从一个人那里得到了一些帮助,代码完全正常。

我正在寻找的是对代码的解释,因为我的基本VBA知识不能提供给我。

有人能解释一下“功能”会发生什么变化吗?

Sub Opgave8()

For i = 2 To 18288
    If Left(Worksheets("arab").Cells(i, 12), 6) = "262015" Then
        Worksheets("arab").Cells(i, 3) = "18" & UniqueRandDigits(5)
    End If
Next i
End Sub
Function UniqueRandDigits(x As Long) As String
Dim i As Long
Dim n As Integer
Dim s As String
Do
n = Int(Rnd() * 10)
If InStr(s, n) = 0 Then
s = s & n
i = i + 1
End If
Loop Until i = x + 1

UniqueRandDigits = s
End Function

2 个答案:

答案 0 :(得分:1)

n = Int(Rnd()*10)返回0到9之间的值,因为Rnd返回0到1之间的值,Int将其转换为整数,也就是自然数。

然后If InStr(s, n) = 0检查结果中是否已存在随机数:如果不是,则使用字符串连接运算符&添加它。

此过程循环(dountil i = x + 1,其中x是您的输入参数,因此您获得一个长度为x的字符串。然后第一部分用这些随机字符串填充行。

N.B。 :我解释了使用代码的逻辑顺序。您的朋友函数UniqRandDigits是在“业务逻辑”之后定义的,但它是代码的根。

答案 1 :(得分:1)

代码在工作表"阿拉伯"中从第2行循环到18288。如果第12列中的前6个字符是" 262015",那么在第3列宏中将填充值为" 18"然后是函数UniqueRandDigits(5)的结果,它生成5个唯一数字(0-9)。

关于UniqueRandDigits函数,最重要的是Rnd()返回的值小于1但大于或等于零。

Int返回整数值,因此Int(Rnd() * 10)将生成0到9之间的随机整数。

If InStr(s, n) = 0 Then确保生成的整数值不存在于此数字的已生成数字中,因为正如函数名称所示,它们必须是唯一的。