Vba 为什么我需要Int函数

Vba 为什么我需要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

在这个代码中,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 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很好。我没想到提到他的括号被取消了。