Vba 为什么我需要Int函数
在这个代码中,Int函数有什么帮助? B.如果Rnd在没有+1的情况下运行良好,为什么要将+1添加到Rnd中 已尝试删除+1Vba 为什么我需要Int函数,vba,range,Vba,Range,在这个代码中,Int函数有什么帮助? B.如果Rnd在没有+1的情况下运行良好,为什么要将+1添加到Rnd中 已尝试删除+1 Function DrawOne(Range As Variant, Optional ReCalc As Variant = False) 'Chooses one cell at Random from a Range and returns range contents 'make Function volatile if Recalc is Tr
Function DrawOne(Range As Variant, Optional ReCalc As Variant = False)
'Chooses one cell at Random from a Range and returns range contents
'make Function volatile if Recalc is True
Application.Volatile ReCalc
'Determine a Random cell
DrawOne = Range(Int(Range.Count) * Rnd + 1)
End Function
使用
Int()
函数的原因是Range.Count*Rnd
可以返回大于0.50的十进制值。发生这种情况时,该值将向上舍入,这将为您提供比预期值高1的上限
下面是一个使用OP代码修改版本的简单测试:
Sub Test()
Dim n As Long
Dim result As Double
Dim Target As Range
Set Target = Range("A1:A10")
For n = 1 To 1000
If Intersect(Target, DrawOne(Target)) Is Nothing Then
MsgBox "DrawOne mising Int() function failure"
End
End If
Next
End Sub
Function DrawOne(Range As Range) As Range
Set DrawOne = Range(Range.Count * Rnd + 1)
End Function
使用
Int()
函数的原因是Range.Count*Rnd
可以返回大于0.50的十进制值。发生这种情况时,该值将向上舍入,这将为您提供比预期值高1的上限
下面是一个使用OP代码修改版本的简单测试:
Sub Test()
Dim n As Long
Dim result As Double
Dim Target As Range
Set Target = Range("A1:A10")
For n = 1 To 1000
If Intersect(Target, DrawOne(Target)) Is Nothing Then
MsgBox "DrawOne mising Int() function failure"
End
End If
Next
End Sub
Function DrawOne(Range As Range) As Range
Set DrawOne = Range(Range.Count * Rnd + 1)
End Function
不确定括号的位置,但我想是为了确保将一个正整数传递给范围,以避免出错。这似乎是一个打字错误。此代码看起来几乎像是获取X和Y之间的随机数。如果是这种情况,它应该是
Int((Range.Count*Rnd)+1)
,并返回一个介于1和Range.Count
^之间的整数,看起来不错!不确定括号的位置,但我想是为了确保将一个正整数传递给范围,以避免出错。这似乎是一个打字错误。此代码看起来几乎像是获取X和Y之间的随机数。如果是这种情况,它应该是Int((Range.Count*Rnd)+1)
,并返回一个介于1和Range.Count
^之间的整数,看起来不错!OP代码中的Int
仅在已经是整数的Range.Count上调用。Rnd
调用在Int
调用之外。@GSerg很好。我没想到提到他的括号是关闭的。OP代码中的Int
只在Range.Count
上调用,它已经是一个整数了。Rnd
调用在Int
调用之外。@GSerg很好。我没想到提到他的括号被取消了。