VBA Range.Find()函数不适用于大浮点数

问题描述 投票:1回答:1

我正在编写代码以查询某一列中的最高美元金额,并取回该值以及目标单元格中​​具有9个字符的相邻列中单元格的值

当我设置范围变量时,它会显示“ 12000.88”的值,该值可以正常工作,但是一旦该值扩展到超过9位的“ 123000.55”,“ set fnd”便找不到它,并且范围变量为Nothing 。我测试了许多其他内容,发现唯一的区别是值的长度

Sub Populate()

    Dim Fnd As Range    
    Set Fnd = Range("L:L").Find(WorksheetFunction.Large(Range("L:L"), 1), , xlValues)

End Sub

我对较小的数字没有问题,但我不明白为什么对较大的数字不起作用。

excel vba range max long-integer
1个回答
-1
投票
问题出在Excel和VBA使用的不同十进制分隔符中。因此,在浮点值中,存在“隐藏特征”。实际上,Find()函数会查找string,并且双精度字符串被“串化”显然不是正确的方法-带逗号而不是点。考虑解析为字符串并将逗号替换为一个点以使其起作用:

Sub Populate() Dim foo As Range Dim biggus As Double biggus = WorksheetFunction.Large(Range("A:A"), 1) Set foo = Range("A:A").Find(ReplaceCommas(biggus), , xlValues) Debug.Print foo.Address End Sub Function ReplaceCommas(valueAsString As Variant) As String Dim valueToReplace As String valueToReplace = valueAsString ReplaceCommas = Replace(valueAsString, ",", ".") End Function

[xlFormulas位于SearchIn参数中时,“功能”未出现的事实是由于xlFormulas将单元格的内容转换为字符串,以便进行搜索在里面。例如,如果存在=SUM(A1+A2)并且我们正在寻找1+A,则找到它的唯一方法是将单元格的内容解析为String。
© www.soinside.com 2019 - 2024. All rights reserved.