Excel VBA 使用运算符 <、>、>=、<= 和 double 作为函数参数

标签 excel vba arguments double

几分钟前我发布了一个关于这个问题的问题,并决定创建一个新的问题,更好地描述这个问题。所以我准备了一个简单的工作表:
sheet example
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 (这是正确的,因为 1744004 之间存在 44005 值)。
有人知道吗?对我来说它看起来像一个错误......

最佳答案

从您的屏幕截图中,您的小数点是 , .
当你连接一个字符串和一个数字时,比如在 ">=" & V1 ,使用当前语言环境将数字转换为字符串。您当前的语言环境有 ,作为小数点,所以你最终得到 ">=44004,2" .
Excel 在内部根据 en-us 语言环境存储所有公式,其中使用 .为小数点。这些可通过 .Formula 访问和 .FormulaR1C1特性。
Excel 界面向您显示这些转换为您的语言环境的公式。这些可通过 .FormulaLocal 访问和 .FormulaR1C1Local特性。WorksheetFunction下的功能只期待真正的内部 en-us 论点。当你通过 ">=44004,2"作为参数,它会导致计算失败,因为函数期望 ">=44004.2" .零结果是an indication过滤器格式错误。
所以你应该give it that :

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

关于Excel VBA 使用运算符 <、>、>=、<= 和 double 作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62893674/

相关文章:

excel - 如何将格式和公式从 Excel 范围复制到另一个范围?

vba - 从 Excel VBA 打印

forms - 是否可以运行仅影响连续形式中的一行的 VBA 代码?

vba - 将行从工作表复制到新工作表的末尾 Excel VBA

JavaScript:参数传递不适用于所有浏览器

ruby-on-rails - Ruby 中参数前的 & 有什么作用?

sql - 在成员(member)每月购买超过 6 个单位的情况下需要帮助拉行

excel - 多个 IF AND 语句 excel

Excel VBA 工作表.名称与工作表.范围

python - Python 有 argc 参数吗?