Excel VBA使用运算符<,>,> =,<=,并以双精度作为函数参数

聚苯乙烯

几分钟前,我就此问题发布了一个问题,并决定创建一个新的问题,对此问题进行更好的描述。所以我准备了一个简单的工作表:

工作表示例

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

另一件事,当我声明V1V2渴望时:

    Dim V1 As Long: V1 = Int(SH.Cells(4, 5).Value)
    Dim V2 As Long: V2 = Int(SH.Cells(5, 5).Value)

单元格E4(蓝色)的计算结果为17(这是正确的,因为17之间存在)。4400444005

有人知道吗?对我来说似乎是个虫子...

塞尔格

在屏幕截图中,小数点是,

当您将字符串与数字连接时,例如in ">=" & V1,该数字将使用当前语言环境转换为字符串。您当前的语言环境,用小数点表示,因此您最终得到">=44004,2"

Excel在内部根据en-us语言环境存储所有公式,除其他外,该语言环境.用于小数点。这些可通过.Formula.FormulaR1C1属性访问
Excel界面向您显示这些公式转换为您的区域设置。这些可通过.FormulaLocal.FormulaR1C1Local属性访问

下的函数WorksheetFunction仅期望真正的内部en-us参数。当您将其">=44004,2"作为参数传递时,由于函数期望,会导致计算失败">=44004.2"零结果表示过滤器格式错误。

所以你应该给它

= WorksheetFunction.SumIfs(R2, R1, ">=" & Str$(V1), R1, "<" & Str$(V2))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章