vba - 为什么 SumIf 在 VBA 中使用 Double 返回 0 并使用整数返回 true?

标签 vba excel sumifs

下面是一个简单的SumIf我要计算的地方sumif >=变量 k声明为 Double .

然而,这返回 0。如果我更改 k对于任何整数、3、4 等,它返回 true值(value)。但如果我改变 k对于 4.23983它返回 0 .

我已经尝试声明另一个 Double变量(假设 a )并放入 a = sumif(...) .但这给了我0也是。我也试过"">="& k &"""但这也不起作用(在 Google 上找到)。

Worksheets("ES").Cells(j + 10, 6).Value = Application.WorksheetFunction.SumIf(Worksheets("help").Range("A1:A4273"), ">=" & k, Worksheets("help").Range("A1:A4273"))

最佳答案

最后编辑。根据评论,情况需要从欧洲格式转换为美国格式进行计算。有关使用的大量代码,请参阅此帖子:
VBA - Evaluate Conditions as String

这是一个可以添加到模块并在工作表中自由使用的函数:



    Function EuroSumIf(ByVal CellRange As Range, ByVal Condition As String, ByVal CompareVal As Double) As Double
        Dim cond As String

        Dim vx As MSScriptControl.ScriptControl
        Set vx = New MSScriptControl.ScriptControl
        Dim sum As Double

        For Each cell In CellRange.Cells
            a = cell.Value
            b = CompareVal
            If InStr(1, a, ".", vbTextCompare) > -1 Then
                a = Replace(a, ".", "")
            End If
            If InStr(1, a, ",", vbTextCompare) > -1 Then
                a = Replace(a, ",", ".")
            End If
            cond = "(a" & Condition & "b)"
            'MsgBox (cond & vbLf & a & Condition & b)
            With vx
                .Language = "VBScript"
                .AddCode "function stub(a,b): stub=" & cond & ": end function"
                If .Run("stub", a, b) Then
                    sum = sum + a
                End If
            End With
        Next
        EuroSumIf = sum
    End Function


使用如下:


    =EuroSumIf(A1:A3,">",0)

关于vba - 为什么 SumIf 在 VBA 中使用 Double 返回 0 并使用整数返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872450/

相关文章:

excel - 如何处理等待另一个应用程序 (SAP GUI) 完成 OLE 操作的情况?

vba - 循环单元格并添加到范围

c# - 为什么要注册 COM 接口(interface)?

arrays - Excel VBA : Element Not Being Stored in Loop

Excel:从日期转换为时间范围

vba - 从特定行中选择具有值的所有单元格

excel - SUMIF 函数多次引用

vba - 选择对象和用户窗体的奇怪错误

excel - 在 SUMIFS 语句中使用月份限定

Excel:优化一堆非常重的 SUMIFS