几分钟前我发布了一个关于这个问题的问题,并决定创建一个新的问题,更好地描述这个问题。所以我准备了一个简单的工作表:
在 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
只要: 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
和 44004
之间存在 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/