1

我正在尝试编写一个宏,它将一个公式放在一列数字下,例如总和或平均值。我想出了这个:

Sub foo()
    ActiveSheet.Range(ActiveCell, ActiveCell.End(xlDown)).Select
    ActiveCell.End(xlDown).Offset(1) = Application.WorksheetFunction.Sum(Selection)
End Sub

此函数将找到总和并将其放在您选择顶部的数据列中的最后一个数字下。这可行,但它不是动态的,新值只是一个值,如果我更改列中的一个数字,则保存总和的单元格不会改变。所以我试图将实际功能放在单元格中。这是我目前拥有的:

Sub foo()
    ActiveCell.Offset(1).Formula = "=Sum(ActiveCell:ActiveCell.End(xlUp))"
End Sub

这次我从底部开始,活动单元格当前打算成为列中的最后一个值。未检测到错误,但输出错误,“#NAME”。我尝试使用引号,但没有得到任何东西。例如:

Sub foo()
    ActiveCell.Offset(1).Formula = "=Sum(" & ActiveCell:ActiveCell.End(xlUp) & ")"
End Sub

有任何想法吗?

4

3 回答 3

1

考虑:

Sub dural()
    Dim s As String
    s = Range(ActiveCell, ActiveCell.End(xlDown)).Address
    ActiveCell.End(xlDown).Offset(1, 0).Formula = "=SUM(" & s & ")"
End Sub
于 2013-06-19T18:07:32.760 回答
1

如果您的数据始终从第 1 行开始,那么您可以这样使用宏:

ActiveCell.Offset(1).ForumulaR1C1 = "=SUM(INDIRECT(ADDRESS(1,COLUMN()) & "":"" & ADDRESS(ROW()-1,COLUMN())))"
于 2013-06-19T18:09:14.687 回答
1

Gary's Student's answer非常接近但不完全存在,这就是我最终得到的:

Sub foo()
    Dim s As String
    s = Range(ActiveCell, ActiveCell.End(xlUp)).Address(0,0)
    ActiveCell.Offset(1).Formula = "=SUM(" & s & ")"
End Sub

如果您选择一列数据中的最后一个单元格,它将把总和公式放在它的正下方,并且它是动态的,因此您可以自由更改数据。

编辑:添加(0,0)到地址,使其动态。

于 2013-06-19T19:23:48.967 回答