首页 > 解决方案 > 为什么我需要 Int 函数

问题描述

A. Int 函数在这段代码中有何帮助?B. 为什么在没有 +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

标签: vbarange

解决方案


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

推荐阅读