UDF Sum不返回小数位,只返回整数

时间:2015-07-23 15:00:10

标签: excel excel-vba vba

我有一个UDF,它总结了它上面的单元格,直到它到达格式化为百分比的单元格。总和公式有效,我可以返回一个数字。 ......然而,似乎它正在围绕它/截断答案。

代码:

 Function sumAbove(cel As Range) As Variant
Dim firstCell As Integer
Dim i As Integer

i = 1000

With cel
    For i = 1 To 1000
        If cel.Offset(-i, 0).NumberFormat = "0.00%" Then
            firstCell = cel.Offset(-i, 0).Row
            Exit For
        End If
    Next i
End With

sumAbove = WorksheetFunction.Sum(Range(Cells(firstCell, cel.Column), Cells(cel.Row, cel.Column)))

End Function

我已尝试将Function sumAbove(cel as Range)作为IntegerDouble,但没有结果。当我尝试将其设置为Float时,我收到错误"用户定义的类型未定义"。

使用此列表:

25.00%
5
5
5
5
5.5

上面的代码将正确使用单元格5 + 5 + 5 + 5 + 5.5 ---然而,它错误地得到了总和。如果我将UDF设置为整数,则它的计算结果为25.如果我将UDF更改为Double,则返回25.75(??)等。

如何让它返回25.50?感谢您的任何提示或建议!

1 个答案:

答案 0 :(得分:3)

firstCell = cel.Offset(-i, 0).Row

这包括SUM功能中的百分比 (25%= 0.25,这就是为什么你得到.75)

使用类似的东西:

Function SumAbove(cell As Range) As Double
Dim firstCell As Long
Dim i As Integer

firstCell = cell.Row

While Not cell.Offset((cell.Row - firstCell) * -1, 0).NumberFormat = "0.00%"
    firstCell = firstCell - 1
Wend
SumAbove = WorksheetFunction.Sum(Range(Cells(firstCell + 1, cell.Column), cell))

End Function