我从一个人那里得到了一些帮助,代码完全正常。
我正在寻找的是对代码的解释,因为我的基本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
答案 0 :(得分:1)
n = Int(Rnd()*10)
返回0到9之间的值,因为Rnd
返回0到1之间的值,Int
将其转换为整数,也就是自然数。
然后If InStr(s, n) = 0
检查结果中是否已存在随机数:如果不是,则使用字符串连接运算符&
添加它。
此过程循环(do
)until 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
确保生成的整数值不存在于此数字的已生成数字中,因为正如函数名称所示,它们必须是唯一的。