我有以下代码:
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中。
我不明白我的错误。有什么想法吗?
答案 0 :(得分:1)
像
Public Function SumUntil(ByRef rng As Range) As Double
SumUntil = Application.WorksheetFunction.Sum(Range(Cells(2, rng.Column), rng))
End Function
用法:
您可以添加一个可选的起始行,以便与
求和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
答案 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