Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA Range.Find()函数不能处理大浮点数_Excel_Vba_Range_Max_Long Integer - Fatal编程技术网

Excel VBA Range.Find()函数不能处理大浮点数

Excel VBA Range.Find()函数不能处理大浮点数,excel,vba,range,max,long-integer,Excel,Vba,Range,Max,Long Integer,我正在编写代码来查找列中的最高金额,并返回值以及目标单元格中包含9个字符的相邻列中单元格的值 当我设置范围变量时,它会显示“12000.88”的值,该值工作正常,但是一旦该值扩展到9位数以上“123000.55”,则“set fnd”找不到它,范围变量为零。我已经测试了很多其他东西,发现唯一的区别是值的长度 Sub Populate() Dim Fnd As Range Set Fnd = Range("L:L").Find(WorksheetFunction.Larg

我正在编写代码来查找列中的最高金额,并返回值以及目标单元格中包含9个字符的相邻列中单元格的值

当我设置范围变量时,它会显示“12000.88”的值,该值工作正常,但是一旦该值扩展到9位数以上“123000.55”,则“set fnd”找不到它,范围变量为零。我已经测试了很多其他东西,发现唯一的区别是值的长度

Sub Populate()

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

End Sub

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

问题在于Excel和VBA使用的不同的十进制分隔符。因此,在浮点值中存在一个“隐藏特性”。
Find()。考虑对字符串进行解析并用逗号替换逗号以使其有效:

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
,找到它的唯一方法是将单元格内容解析为字符串。

问题在于Excel和VBA使用的不同十进制分隔符。因此,在浮点值中存在一个“隐藏特性”。
Find()。考虑对字符串进行解析并用逗号替换逗号以使其有效:

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
,找到它的唯一方法是将单元格内容解析为字符串。

它与
xlformulas
一起工作-别问我为什么!如果整列都是空的,它会抛出1004个错误。我已经在这上面敲了8个小时了。。。xl公式。。。它是有效的。。。如此沮丧但却如释重负。谢谢。@JeffF-
Find
有时确实有点问题,会给双倍和日期带来意想不到的结果。通常,如果可能的话,我会编写自己的函数(并缓慢循环)或解析为字符串。它适用于
xlformulas
-别问我为什么!如果整列都是空的,它会抛出1004个错误。我已经在这上面敲了8个小时了。。。xl公式。。。它是有效的。。。如此沮丧但却如释重负。谢谢。@JeffF-
Find
有时确实有点问题,会给双倍和日期带来意想不到的结果。通常,如果可能的话,我会编写自己的函数(并缓慢循环)或解析为字符串@SJR-我只是觉得它是马车。无论如何,问题出在
中。VBA使用点,Excel使用逗号作为十进制分隔符。我已经编辑了。@JvdV-事实上我也是。我对它进行了编辑以使其正常工作。我仍然不确定答案。由于您将值解析为字符串,因此它显然可以工作,
Find
What
参数。如果我们首先尝试检查变量
WorksheetFunction.Large(Range(“A:A”),1)
,我们可以看到VBA使用一个点来存储它,因为它是基于en_US的。你确定这是一个bug并且
Find
只接受字符串吗?为什么9岁以下的人能工作?此外,为什么
xlFormulas
会起作用。我也在试图弄明白这台自动取款机的意义@JvdV-
WorksheetFunction.Large(范围(“A:A”),1)
工作正常,并将其正确传递给
double
类型的
biggus
变量。当搜索
A:A
列以查找该变量时,会出现问题-它错误地“读取”了点和逗号,因此无法找到它。@JvdV-关于其他问题-
find()
不仅接受字符串,而且会解析为参数字符串,因此出现问题。我想,9个字符以下的函数应该是某种优化,以便使函数快速。而about
xlFormulas
会自动将单元格的输入转换为字符串,这样就可以工作了。毕竟,
=SUM(A1+A2)
是一个纯字符串(例如,不是
长的
,也不是
日期
,也不是
双的
@SJR-我只是认为它有缺陷。无论如何,问题在于
。VBA使用点,Excel使用逗号作为十进制分隔符。我编辑过。@JvdV-事实上和我一样。我编辑它是为了让它工作。我仍然不确定a是否正确。)nswer。由于您将值解析为字符串,它显然会起作用,
Find
What
参数。如果我们首先尝试检查变量
WorksheetFunction.Large(范围(“A:A”),1)
我们可以看到,VBA使用一个点来存储它,因为它是基于en_US的。你确定这是一个bug并且
Find
只接受字符串吗?为什么少于9个字符可以工作?此外,为什么
xlFormulas
可以工作。我还试图理解这个atm。=@JvdV-
工作表函数。大(范围(“a:a”),1)
工作正常,并将其正确地传递给
double
类型的
biggus
变量。当搜索
A:A
列以查找该变量时,会出现问题-它错误地“读取”了点和逗号,因此无法找到它。@JvdV-关于其他问题-
find()
不仅接受字符串,它还解析为参数字符串,因此问题就出现了。9个字符以下的函数应该是某种优化,以便