如何与vba中的参数求和?

时间:2018-05-21 16:15:03

标签: excel vba excel-vba

我有以下代码:

Option Explicit


Function SumAboveV(column As Range)

Worksheets("Sheet16").Activate
Dim r As Range, rAbove As Range
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
Set r = zelle.Offset(0, -2)
Set rAbove = Range(r.Offset(-1, 0), Cells(2, r.column))
column.Value = wf.Sum(rAbove)

End Function

我想要的只是总结我在B行中的所有数字,直到我放置函数的单元格,例如正如您在附加的屏幕截图中看到的那样,我想总结从B2到该单元格的所有值,并将总值放在行D中。

我不明白我的错误。有什么想法吗?

enter image description here

5 个答案:

答案 0 :(得分:1)

Public Function SumUntil(ByRef rng As Range) As Double
    SumUntil = Application.WorksheetFunction.Sum(Range(Cells(2, rng.Column), rng))
End Function

用法:

Example

您可以添加一个可选的起始行,以便与

求和
Public Function SumUntil(ByRef rng As Range, Optional ByVal startRow As Long = 3) As Double
    SumUntil = Application.WorksheetFunction.Sum(Range(Cells(startRow, rng.Column), rng))
End Function

Example 2

答案 1 :(得分:0)

您可以依赖于R1C1表示法,而不是创建Range变量和所有这些操作。使用R1C1使参考动态 - 无论您在D列中插入此公式,它都将获得正确的地址。你只是不必做额外的操作。

zelle.FormulaR1C1 = "=SUM(RC[-2]:R2C[-2])"

答案 2 :(得分:0)

我可能会遗漏一些东西,但为什么不在D栏中使用sum?如果您使用“= Sum($ B2:B3)”然后将该公式拖到任何地方。然后D中的每个单元格都会有一个总和直到那一行。它可能比为它编写一个完整的宏更简单。

答案 3 :(得分:0)

您可以使用以下公式:

=SUM($B$1:INDEX($B:$B,ROW()-1))

放置在单元格B367中,它返回B1:B366的总和,并且不会给出循环引用警告。

答案 4 :(得分:0)

  

我想要的只是总结我在B行中的所有数字,直到   我放置函数的单元格

然后走这条路:

Public Function SumAboveV() As Double
    SumAboveV = Application.WorksheetFunction.Sum(Range("B2", Cells(Application.Caller.Row, "B")))
End Function

并且您不需要将任何参数传递给您的函数,因为Application.Caller.Row将获得"调用"的行索引。细胞

如果您希望在任何工作表重新计算时更新,请添加Application.Volatile语句

Public Function SumAboveV() As Double
    Application.Volatile
    SumAboveV = Application.WorksheetFunction.Sum(Range("B2", Cells(Application.Caller.Row, "B")))
End Function