[英]Excel VBA use operators <,>, >=, <= with doubles as function arguments
几分钟前我发布了一个关于这个问题的问题,并决定创建一个新的问题,更好地描述这个问题。 所以我准备了一个简单的工作表:
在G4
(绿色)上,我放置了公式=SUMIFS(B1:B20;A1:A20;">="&E4;A1:A20;"<"&E5)
并且效果很好。
单元格E4
(蓝色)由脚本填充:
Sub Button1_Click()
Dim SH As Worksheet: Set SH = ThisWorkbook.Sheets("Sheet1")
Dim R1 As Range: Set R1 = SH.Range(SH.Cells(1, 1), SH.Cells(20, 1))
Dim R2 As Range: Set R2 = SH.Range(SH.Cells(1, 2), SH.Cells(20, 2))
Dim V1 As Double: V1 = SH.Cells(4, 5).Value
Dim V2 As Double: V2 = SH.Cells(5, 5).Value
SH.Cells(5, 7).FormulaR1C1 = WorksheetFunction.SumIfs(R2, R1, ">=" & V1, R1, "<" & V2)
End Sub
很容易看出该值也应该是18
。 但是它的评估结果为0
。
另一件事,当我将V1
和V2
声明为 long 时:
Dim V1 As Long: V1 = Int(SH.Cells(4, 5).Value)
Dim V2 As Long: V2 = Int(SH.Cells(5, 5).Value)
单元格E4
(蓝色)的计算结果为17
(这是正确的,因为44004
和44005
之间有17
值)。
有人知道吗? 对我来说它看起来像一个错误......
从您的屏幕截图中,您的小数点是,
。
当您将字符串与数字连接时,例如在">=" & V1
中,数字将使用当前语言环境转换为字符串。 您当前的语言环境具有,
作为小数点,因此您最终得到">=44004,2"
。
在内部 Excel 根据 en-us 语言环境存储所有公式,其中使用.
为小数点。 这些可以通过.Formula
和.FormulaR1C1
属性访问。
Excel 界面显示这些公式转换为您的语言环境。 这些可以通过.FormulaLocal
和.FormulaR1C1Local
属性访问。
WorksheetFunction
下的函数只需要真正的内部 en-us arguments。 当您将">=44004,2"
作为参数传递时,它会导致计算失败,因为 function 应为">=44004.2"
。 结果为零表示过滤器格式错误。
所以你应该给它:
= WorksheetFunction.SumIfs(R2, R1, ">=" & Str$(V1), R1, "<" & Str$(V2))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.